대량의 long을 배열에 저장하려고하는데 배열 및 ArrayList에 OOM 오류가 발생합니다.
ArrayList<Long> A = new ArrayList<Long>();
Long[] B = new Long[100000000];
for(int i = 0; i < 100000000; i++) A.add(i);
for(int i = 0; i < 100000000; i++) B[i] = (long) i;
//Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
//at java.lang.Integer.valueOf(Unknown Source)
이렇게 많은 양의 long 또는 정수를 저장하는 데 사용할 수있는 다른 간단한 데이터 구조가 있습니까?
-Xmx
실행할 때 플래그를 적절하게 사용하면 java
(자세한 내용은 여기 참조 ) 힙 크기를 늘릴 수 있습니다. 이렇게하면 필요한 경우 제어 된 방식으로 더 많은 메모리를 사용할 수 있습니다. 내가 아는 한, 프로그램 자체 내에서 더 많은 힙 메모리를 "요구"하는 방법은 없습니다 (C에서 sbrk () 또는 mmap () 시스템 호출을 실행하는 것과 유사 함).
내가 연결 한 대답은 다음과 같습니다.
예를 들어 JVM을 이와 같이 시작하면 256MB의 메모리로 시작되고 프로세스가 최대 2048MB의 메모리를 사용할 수 있습니다.
자바 -Xmx2048m -Xms256m
또한 각각 킬로바이트, 메가 바이트 및 기가 바이트에 대해 "k", "m"또는 "g"를 사용할 수 있습니다. 그러나 64 비트 JVM을 사용하지 않는 한 1GB (힙 크기)를 초과 할 수 없습니다.
특정 사용 사례로 수학 을 수행하는 경우 64 비트 long * 100000000을 가정하면 약 800MB의 공간이 필요합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다