2012-01-10 3 views
3

jar 파일을 실행하려고하지만 jvm 최대 힙 크기를 처리하려고합니다. 크기 최대 헤드 크기를 80MB로 설정하기 위해 -Xmx80m 매개 변수를 사용합니다.자바 최대 힙 크기 및 OS 상위 출력

내 Linux OS의 "top"명령을 사용하여 응용 프로그램의 메모리 할당을 모니터하고 jvm이 -Xmx param (java -Xmx80m -jar myapp.jar)보다 많은 메모리를 사용하는 것에 놀랐습니다. 더 구체적으로 내 최고 출력에서 ​​

VIRT : 257m
RES : 나는 RES는 최대 80메가바이트에서 내 응용 프로그램 ""메모리 부족 예외를 생각하다 것 80메가바이트의 JVM보다 더 필요로하는 경우되어야한다고 생각 109m

(또는 something like this)

내 응용 프로그램에서 외부 라이브러리를 사용하고 있습니다. 이 라이브러리는 param으로 지정한 힙과 별개로 자체 메모리를 사용합니까?

어쨌든 내가 매개 변수로 설정 한 것을 극복하지 않기 위해 jvm의 메모리 사용을 어떻게 제한 할 수 있습니까?

업데이트 :
ulimit (unix 명령)을 사용하여 JVM에서 사용하는 리소스를 제한하는 것이 좋은 해결책입니까?

내가 사용하고 있습니다 :

자바 버전 "1.7.0_02"
자바 (TM) SE 런타임 환경
자바 핫스팟 (TM) 서버 VM (22.0를 구축 (1.7.0_02이-B13 구축) -b10, 혼합 모드) 당신은 -Xmx는 JVM에 의해 사용되는 총 메모리에 하드 제약을 줄 것이라고 기 대해서는 안 페도라 8 PC

+0

"heap size"! = "JVM에서 사용하는 메모리". 그런데, 어떤 JVM/버전을 사용하고 어떤 플랫폼에서 이러한 경우 중요합니다. – Viruzzo

답변

2

.

-Xmx은 Java 힙 크기에 제한을 두었습니다. Java 힙 외부의 모든 메모리에는이 제한이 적용되지 않습니다. 여기에는 코드, 클래스 메타 데이터, 상수 풀 등이 포함됩니다. 에는 포함되지 않았기 때문에 영구 공간 (-XX:MaxPermSize)의 크기를 조정할 수있는 추가 작업이 있습니다.

2

-mx 또는 -Xmx 옵션은 최대 힙 크기를 설정합니다. 이 가상 메모리는 시작시 할당되며 프로그램이 실행될 때 사용됩니다. @aix 노트처럼 힙이 아닌 메모리는 더 많을 수 있습니다.

외부 네이티브 라이브러리는 자체 힙이 아닌 메모리를 사용합니다. 최대 값은 모든 라이브러리의 힙을 제한합니다. (사전 할당되어 증가 할 수 없음)