본문 바로가기

app/java

int 배열 1억개를 만들수 있을까?

알고리즘을 하나 생각해본김에 만들고 있었다. 물론 int 배열로 1억개를 만드는것만큼 이상한것은 없지만, 

처리 속도 때문에 리스트로 만들다가 배열로 만들어보기로 했다. 

(알다시피 리스트로 삭제/입력 속도와 배열의 삭제/입력 속도 차이는 엄청나다. 갯수가 늘어갈수록 기하급수적으로 속도차이가 난다. 언젠가 한번 테스트 해보는것도 도움이 될것이다.)


에러 두둥! 힙메모리가 부족하다고 뜬다.


물론 eclipse.ini 파일을 변경하여(1024m으로 변경) 실행해도 결과값은 똑같다.

아무래도 32비트에서는 이클립스 메모리 한계치가 있는듯하다.


1억미만 가장 큰 배열은 몇개를 선언할수 있을까? 하는 마음에 소스 수정


결과는?



int[44708793] 까지 성공. 그다음은 에러가 발생.

결국 32비트에서는 1억도 아닌 5천만 밑에서 끝나고 말았다.



64비트에서는 어떻까?

64비트에서 성공한 최대 배열의 수는 다음과 같다. 

삼억오천사백칠만사천육백이십.

그 이상 넘어가면 바로 아웃오브메모리가 발생.




1억은 가뿐하게 넘어가며 3억 5천을 찍어주었다.



1. 위의 상황들은 해당 컴퓨터의 프로그램상태(메모리 점유율)에 따라 달라질수 있음을 명시한다.

2. 첫번째 예시의 경우 for 문으로 계속적으로 생성하였기 때문에 가비지컬렉션에 따른 메모리 청소가 얼마나 효과적으로 작동했느냐에 따라서 결과가 달라질수 있음도 명시한다.

3. 해당 컴퓨터의 메모리는 32비트의 경우 4g 64비트의 경우 8g 임을 알려드립니다.


최종 목적은 32비트에서 int[] 이 1억개 를 선언할수 있는가? 였지만. 역시나 실패.

64비트에서는 성공. 

하지만!! 과연 int[] 을 1억개나 쓸려고 하는 사람이 있을까?ㅋㅋㅋ