Java-Xmx, 시스템의 최대 메모리



자바 배열 메모리 구조 (6)

내 Java 응용 프로그램은 "java -jar j.jar"프로세스를 실행하여 다른 Java 응용 프로그램을 실행합니다. J.jar는 주어진 데이터 세트에 따라 많은 메모리를 사용하는 것으로 알려져 있으며 종종 OutOfMemoryError 힙을 가져옵니다. 그래서 -Xmx를 사용하여 최대한 많은 메모리를 할당 할 수 있습니다. 나는 시스템에서 총 메모리를 얻고 -Xmx에서 80-90 %를 지정하려고 생각했습니다.

내 문제에 대한 해결책이 있습니까? 그리고 내 솔루션 사운드는 어떻게됩니까?

편집 : 사용중인 메모리가 JAR 파일을 압축하는 데 사용하는 Java의 내장 pack200 압축에 의해 메모리 사용량을 줄일 수 없습니다.


-XmX의 한계는 32 비트 창에서 -Xmx1500m입니다. 공유 라이브러리는 더 큰 힙을 사용합니다. 이 작업을 수행하려면 약 2GB의 RAM이 필요합니다.

비 Windows 운영 체제에서는 더 커질 수 있고 64Bit JVM은 훨씬 더 많이 가능합니다.

Windows XP는 RAM의 3Gb 이상을 허용하지 않습니다 (XP SP3 이후 4Gb 물리적 인 경우 상관하지 않음). Vista는 YMMV와 다를 수 있습니다.

나는 64 비트 리눅스에서 64 비트 JVM에서 -Xmx4000M을 시도했지만 괜찮았다. 6Gb의 물리적 인 RAM을 가지고 있다고 생각하면 커다란 요청이 아니 었습니다.

귀하의 80 % 아이디어는 흥미 롭지 만, 제 테스트 시스템은 나쁜 영향을 미치지 않는 것보다 더 높은 비율로 실행됩니다. (당신이 다른 일을 시도하지 않는 한.)

그리고 다른 주석 기자가 맞습니다. JVM의 메모리 내 이미지를 페이징하는 것이 빠르지 않습니다. 나중에 JVM은 덜 복잡하게 처리하는 것이 더 좋습니다 (하지만 더 나은 가비지 컬렉터도 있습니다).

메모리 사용량을 줄일 수 없다면 - 그리고 얼마나 어려운지 알게 될 것입니다 - 그런 다음 많은 양의 숫양을 가지고 그것의 대부분을 할당하십시오.



항아리에서 프로그램을 실행하기 위해 OS를 사용하는 이유가 있습니까? 응용 프로그램과 별도의 프로세스에서 실행하지 않아도되는 경우 코드에서 직접 main 메서드를 호출하고 원하는 -Xmx로 응용 프로그램을 시작할 수 있습니다.


다음 blog 에서 jconsole 및 기타 도구를 사용하여 Java 응용 프로그램의 문제를 해결하는 방법에 대한 전체 블로그 게시물이 있습니다. 메모리 사용을 제어 할 수 없다는 것이 메모리 누출 일 가능성이 높지만 다른 이유로 인해 발생할 수도 있음을 기억하십시오. 게시물을보고 해당 시나리오를 복제하고 문제가 해결되었는지 확인하십시오.

blog


OS에 따라 여유 공간이 있고 사용 가능한 메모리 크기를 얻는 데 적합합니다.

java.lang.management.OperatingSystemMXBean mxbean = java.lang.management.ManagementFactory.getOperatingSystemMXBean();
com.sun.management.OperatingSystemMXBean sunmxbean = (com.sun.management.OperatingSystemMXBean) mxbean;
long freeMemory = sunmxbean.getFreePhysicalMemorySize();
long availableMemory = sunmxbean.getTotalPhysicalMemorySize();

거기에서 80-90 %를 알아 내고 원하는 최대 메모리 크기로 병을 시작할 수 있습니다.

나는 이것이 모든 OS (예 : Windows)에서 작동하는지 모르지만 OSX와 Linux 모두에서이를 테스트했을 때 작동했습니다.


아직 수행하지 않은 경우 메모리 프로파일 러를 통해 프로그램을 실행해야합니다. 특정 데이터 구조는 더 이상 사용되지 않더라도 처리되지 않을 수 있습니다.

JProfiler는 꽤 멋지지만 Java 5에서 소개 된 HPROF를 사용하여 동일한 정보를 얻을 수 있습니다. http://java.sun.com/developer/technicalArticles/Programming/HPROF.html

아키텍처마다 (32 비트 대 64 비트), OS 및 JVM을 기반으로하는 다른 플랫폼의 최대 힙 크기가 다릅니다.

XML 파일에서 읽는 문자열과 같이 재사용 할 수있는 값이 많은 경우 개체를 풀링하여 메모리 요구량을 크게 줄일 수 있습니다.





memory-management