2014-05-20 3 views
1

32 비트 JVM의 최대 힙 공간은 2G라고 알려져 있지만 실험적으로 1290M 정도의 다양한 공간 만 할당 할 수 있다는 것을 알고 있습니다. (때로는 더 안전하게 할당 할 수 있습니다. 때때로 그 숫자에 오류가 발생합니다.)32 비트 JVM : 최대 힙 공간?

또한 64 비트 JRE가 있고 OS는 Win7 64 비트이기 때문에 RAM 사용을 거의 제한 할 수 없습니다.

단순히 64 비트 JVM을 사용할 수 있기 때문에 문제가 없습니다.하지만 더 정확하게 알고 있으면 다른 사람을 도울 수 있습니다.

그래서 궁금합니다. 왜 이상한 최대 힙 영역이 생깁니 까?

나는 32 비트 JRE를 가리키는 변수로의 -Xmx 및 java32에 대한 숫자를 변화와 함께

"%java32%" -xmx****M Program 

처럼 cmd를 명령을 사용했다.

다른 주제에서이 주제를 찾았지만 다른 곳이나 검색에 능숙하지 않습니다.

편집 :

가 할당 내가 그 메모리를 사용하지 않았기 때문에, 난 그냥 그것을 위해 시스템을 요구 부정확하다.

물론 64 비트 JRE는 4G 이상에서도 힙 공간을 허용합니다.

+0

[관련] (http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#gc_heap_32bit), 답변 없음. – keyser

+0

덧붙여서 : 우선 (관련의 밑에) 오른쪽에 첫번째 포스트 ... – Burkhard

답변

1

당신은 최대의 자바 런타임을 요청할 수 있습니다 :

public class MaxMemory { 
    public static void main(String[] args) { 
     Runtime rt = Runtime.getRuntime(); 
     long totalMem = rt.totalMemory(); 
     long maxMem = rt.maxMemory(); 
     long freeMem = rt.freeMemory(); 
     double megs = 1048576.0; 

     System.out.println ("Total Memory: " + totalMem + " (" + (totalMem/megs) + " MiB)"); 
     System.out.println ("Max Memory: " + maxMem + " (" + (maxMem/megs) + " MiB)"); 
     System.out.println ("Free Memory: " + freeMem + " (" + (freeMem/megs) + " MiB)"); 
    } 
} 

출처 : https://stackoverflow.com/a/7019624/12860

(오라클의 FAQ에서) 이유 : 32에 대한

이론적으로 최대 힙 한계 비트 JVM은 4G입니다. 사용 가능한 스왑, 커널 주소 공간 사용, 메모리 조각화 및 VM 오버 헤드와 같은 다양한 추가 제약으로 인해 실제로는 한계가 훨씬 낮아질 수 있습니다. 대부분의 최신 32 비트 Windows 시스템에서 최대 힙 크기는 1.4G에서 1.6G 사이입니다. 32 비트 Solaris 커널에서 주소 공간은 2G로 제한됩니다. 32 비트 VM을 실행하는 64 비트 운영 체제에서 최대 힙 크기는 더 높아질 수 있으며 많은 Solaris 시스템에서 4G에 접근합니다.

+0

미안 그것 질문에서 명확하지 않은 경우에, 그러나 문제는이지 않는 얼마나 한정된 한계에이다, 그러나 얼마나 정확하게의 한계 한계는 있습니다. – user3657016

+0

Enter는 댓글을 게시하지 않아도되며, 저는 여기에서 새로운 편입니다. 내 말은, 만약 당신이 -xmx10G하면 당신은 분명히 오류가 발생합니다. 하지만 32 비트 JVM을 사용하면 1290M 주위에서 얻을 수 있습니다. 왜 그런지 궁금합니다. – user3657016

+0

@ user3657016 : 내 편집을 참조하십시오. – Burkhard

관련 문제