2014-10-28 6 views
1

HotSpot JVM 가비지 수집에 대해 몇 가지 질문이 있습니다.HotSpot JVM이 젊은 생성 크기를 동적으로 변경합니까?

우리는 자바 프로세스가 실행이 있고 OPTS는 다음과 같습니다 당신이 보는대로, 최대 힙 크기는 약 90g

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
-Xloggc:/mnt/dfs/0/hdfs/logs/namenode.gc.log -XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 
-XX:+CMSParallelRemarkEnabled -XX:-DisableExplicitGC -XX:+UseCMSCompactAtFullCollection 
-XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -server -Xmx92160m -Xms92160m 
-Xss256k -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15 -XX:+PrintTenuringDistribution 

입니다.

this article에 따르면 기본값으로 NewRatio = 2 및 SurvivorRatio = 8입니다. 따라서 Eden 크기는 90G * 1/3 * 8/10 = 24G이어야하며 생존자 크기는 90G * 1/3 * 1/10 = 3G이어야합니다.

그러나 사실

, 내가 그러면 jstat 사용

sudo jstat -gcnew 37082 
S0C S1C S0U S1U TT MTT DSS  EC  EU  YGC  YGCT 
48960.0 48960.0 0.0 5981.3 15 15 24480.0 391936.0 82332.7 13351 1379.450 

에덴의 크기는 3백90메가바이트에 대해, 그리고 생존자 크기 만 48메가바이트합니다. 이것은 많은 젊은 세대를 일으 킵니다.

에덴 크기가 왜 그렇게 작습니까?

+0

모든 세대 크기가 기본적으로 동적으로 조정된다는 사실을 알고 있습니다. 어떤 옵션도이를 변경하지 않는 것 같으므로 아마도 그것이 있어야 할 것입니다. VisualGC를 사용하여 VisualVM의 선택적 플러그인이라는 사실을 모니터 할 것을 권장합니다. –

답변

2

에덴 크기는 필요한만큼 커야합니다. 수명이 짧은 쓰레기를 더 많이 생성하면 NewSize가 커집니다.

1

여기에서 this Oracle docs!

newSize와와 MaxNewSize 매개 변수

는 새로운 세대의 최소 및 최대 값을 제어

내가 힙이 증가 또는 축소 할 때, JVM은 미리 정의 된 NewRatio를 유지하기 위해 이전 및 새 세대의 크기를 다시 계산해야한다는 것을 이해할 수있다.,

크기.

이전 세대와 관련된 젊은 세대의 크기는 NewRatio에서 제어합니다. 예를 들어 -XX : NewRatio = 3을 설정하면 이전 세대와 젊은 세대의 비율이 1 : 3이고 eden과 survivor 공간을 합한 크기가 힙의 네 번째가됩니다.

크기로 Java 힙 :

가 젊은 세대에 많은 메모리를 사용할 수 있도록합니다. 기본값은 NewRatio와 -Xmx 설정에서 계산됩니다.

NewSize의 값을 설정하여 차이가 있는지 확인할 수 있습니까?