간단한 프로그램 :가상 메모리에서 400M을 사용하는 Java는 무엇이며 어떻게 사용합니까?
public class SleepTest {
public static void main(String[] args) throws InterruptedException {
Thread.sleep(60 * 1000);
}
}
그런 다음
$ javac SleepTest.java
$ java -cp . SleepTest
오픈 JDK 1.6.0_20를 들어이 내 컴퓨터에 가상 메모리 600M를 사용합니다! 즉, "위쪽"은 "VIRT"600M 및 RES 10m을 나타냅니다. (우분투 10.04, 32 비트 또는 64 비트).
Sun의 Java 1.6.0_22의 경우 400M의 가상 메모리를 사용합니다.
가상 메모리를 모두 사용하고 있으며 그 사용을 어떻게 낮 춥니 까?
전체 "자바 -version"
오픈 JDK :
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.4) (6b20-1.9.4-0ubuntu1~10.04.1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)
일 :
$ /usr/lib/jvm/java-6-sun-1.6.0.22/jre/bin/jav -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
편집 :
패키지 중 하나에서 javac의와 컴파일은 '아무튼 도와 줄 것 같아.
Memory: used 0.3M free 15.2M total 15.5M max 247.5M
오픈 JDK :
private static String megabyteString(long bytes) {
return String.format("%.1f", ((float)bytes)/1024/1024);
}
private static void printUsedMemory() {
Runtime run = Runtime.getRuntime();
long free = run.freeMemory();
long total = run.totalMemory();
long max = run.maxMemory();
long used = total - free;
System.out.println("Memory: used " + megabyteString(used) + "M"
+ " free " + megabyteString(free) + "M"
+ " total " + megabyteString(total) + "M"
+ " max " + megabyteString(max) + "M");
}
이
일을 보여줍니다 심지어 -Xmx5m와
Memory: used 0.2M free 15.3M total 15.5M max 494.9M
을 다음과 같이
몇 가지 코드를 추가하면 사용하여 인쇄하는 메모리입니다 그래서 그것은 최소값을 가져야한다. 음? 나는 기본값 (jvm, 가상 머신, 기본적으로 물리적 메모리의 4 분의 1에 해당하는 일반적인 전략에 따라 다름)에 대해 읽었지 만, 큰 가상 메모리 사용을 유발하고 그것을 줄일 수는 없습니까?
편집 # 2 :
$ java -Xmx5m -cp . SleepTest
오픈 JDK :
$ java -Xmx5m SleepTest
Memory: used 0.2M free 4.7M total 4.9M max 5.8M
는 "전용"가상 메모리 150M JVM 중 하나에 사용
는 -Xmx를 추가하는 일을 변경합니다.
편집 # 3 :
번호, bestsss, Mikaveli, 그리고 어쩌면 다른 사람은 가상 메모리 스왑을 사용하지 않는 것을 지적했다. NOS는 OOM 킬러가 실제 메모리 사용으로 갈만큼 똑똑하다고 주장합니다. 그런 것들이 사실이라면 가상 메모리 사용에 신경 쓰지 않을 것입니다. RES (레지던트 크기)가 작아서 좋습니다.
편집 # 4 : 받아 답변하는
확실하지. 가상 메모리가 저렴하기 때문에 걱정하지 마십시오. 또는 -Xmx 또는 -Xms와 상관없이 Java가 가상 메모리에 적어도 150M을 예약하는 이유에 대한 설명이 있습니다. 실제 메모리 사용량은 아주 적습니다.
편집 # 5는 :
이것은 dup이다. 나는 투표하기로 결심했다.
너무 많이 우리가 더 많은 정보없이 확인할 수 있습니다 (같은 당신을 위해 간다)가있다. 프로그램을 실행하고 힙 덤프를 얻어야합니다. Java 응용 프로그램을 실행하는 pid에 대해 jmap을 실행 한 다음 Eclipse MAT와 같은 도구에서 파싱합니다. –
유용한 도구로는 VisualVM이 있습니다. https://visualvm.dev.java.net/ –
가상 메모리 크기가 걱정되는 이유는 무엇입니까? 주소 공간이 부족합니까? – biziclop