3 천만 크기의 정수 배열을 만들려고합니다 (자체 개체로 시도했지만 int에서도 동일하게 발생). "OutOfMemoryError : Java 힙 공간"이 계속 발생합니다.
Integer [] index = new Integer[30000000];
for (int i = 0 ; i < 30000000 ; i++){
index[i] = i;
}
"Runtime.getRuntime (). totalMemory ()"및 "maxMemory ()"를 사용하여 총 힙 공간을 확인한 결과 64MB로 시작하고 최대 값이 900MB 이상임을 확인했으며 실행 중에 900 이상을 얻었습니다. 힙과 크러쉬에.
이제 Integer가 4 바이트를 차지한다는 것을 알고 있으므로 30 * 4 * 1000000을 곱해도 150-100 메가 만 얻을 수 있습니다.
int와 같은 기본 유형으로 시도하면 작동합니다.
어떻게 고칠 수 있습니까?
Java의 int 프리미티브는 4 바이트를 차지하지만 Integer와 같은 ValueObject를 사용하면 훨씬 더 많은 공간을 차지하게됩니다. 머신에 따라 참조만으로 32 비트 또는 64 비트를 차지할 수 있으며 래핑하는 기본 형식의 크기를 차지할 수 있습니다.
공간이 문제인 경우 기본 int를 사용해야합니다. 여기에이 주제를 더 자세히 설명하는 아주 좋은 대답이 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다