PretenureSizeThreshold
7117 ワード
最近プロジェクトjvmのパラメータを調整して、ゆっくりといくつかのふだんの調整の参のいくつかのノートを整理して忘れましょう
XX:PretenuerSizeThresholdがこの値を超えると、オブジェクトは直接old領域にメモリを割り当てます.
Frequently Asked Questions about Garbage Collection
There is a flag (available in 1.4.2 and later) l-XX:PretenureSizeThreshold= that can be set to limit the size of allocations in the young generation. Any allocation larger than this will not be attempted in the young generation and so will be allocated out of the old generation. The default size for PretenureSizeThreshold is 0 which says that any size can be allocated in the young generation
テストプログラム
参照PretenuerSizeThresholdのデフォルト値と役割
下から見ると(1)byte[]array=new byte[9102241024];
Edenは8 M、2つのSurvivorはそれぞれ1 Mである.Old Genは10 Mである.我々が割り当てたオブジェクトは9 Mであり,Edenより大きいのでOld Gen,used:9437200に直接割り当てる.
(2)byte[]array=new byte[610241024];すべてはEdenに割り当てられています.
byte[]array=new byte[610241024];これはVMパラメータです.
Edenは8 M、2つのSurvivorはそれぞれ1 Mである.Old Genは10 Mである.ここでは、PretenuerSizeThreshold=4 Mを設定した後、オブジェクトメモリをOld Genに直接割り当てることができます.
[gcviewer]をダウンロード(https://sourceforge.net/projects/gcviewer/)gcログを表示し、gcviewerを起動する
gc logを開くと分析できます
XX:PretenureSizeThreshold
XX:PretenuerSizeThresholdがこの値を超えると、オブジェクトは直接old領域にメモリを割り当てます.
Frequently Asked Questions about Garbage Collection
There is a flag (available in 1.4.2 and later) l-XX:PretenureSizeThreshold= that can be set to limit the size of allocations in the young generation. Any allocation larger than this will not be attempted in the young generation and so will be allocated out of the old generation. The default size for PretenureSizeThreshold is 0 which says that any size can be allocated in the young generation
テストプログラム
参照PretenuerSizeThresholdのデフォルト値と役割
public class PretenureSizeThreshold
{
/**
* VM: Args: -Xms20m -Xmx30m -Xmn10m -XX:PretenureSizeThreshold=4m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal -XX:+PrintGCDetails -Xloggc:./gc.log
* @param args
*/
public static void main(String[] args)
{
//byte[] array = new byte[9*1024*1024];
byte[] array = new byte[6*1024*1024];
//byte[] array1 = new byte[1*1024*1024];
for(MemoryPoolMXBean memoryPoolMXBean: ManagementFactory.getMemoryPoolMXBeans()){
System.out.println(memoryPoolMXBean.getName()
+ " total:"+memoryPoolMXBean.getUsage().getCommitted()
+" used:"+memoryPoolMXBean.getUsage().getUsed());
}
try {
Thread.sleep(10000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
テスト-1
-Xms20m -Xmx30m -Xmn10m
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal
下から見ると(1)byte[]array=new byte[9102241024];
Code Cache total:2555904 used:1221888
Metaspace total:4980736 used:2877544
Compressed Class Space total:524288 used:308512
Par Eden Space total:8388608 used:1359440
Par Survivor Space total:1048576 used:0
CMS Old Gen total:10485760 used:9437200
Edenは8 M、2つのSurvivorはそれぞれ1 Mである.Old Genは10 Mである.我々が割り当てたオブジェクトは9 Mであり,Edenより大きいのでOld Gen,used:9437200に直接割り当てる.
(2)byte[]array=new byte[610241024];すべてはEdenに割り当てられています.
Code Cache total:2555904 used:1224064
Metaspace total:4980736 used:2879976
Compressed Class Space total:524288 used:309080
Par Eden Space total:8388608 used:7650912
Par Survivor Space total:1048576 used:0
CMS Old Gen total:10485760 used:0
テスト-2
byte[]array=new byte[610241024];これはVMパラメータです.
-Xms20m -Xmx30m -Xmn10m -XX:PretenureSizeThreshold=4m
-XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC
-XX:+PrintFlagsFinal -XX:+PrintGCDetails -Xloggc:./gc.log
Edenは8 M、2つのSurvivorはそれぞれ1 Mである.Old Genは10 Mである.ここでは、PretenuerSizeThreshold=4 Mを設定した後、オブジェクトメモリをOld Genに直接割り当てることができます.
Code Cache total:2555904 used:1229312
Metaspace total:4980736 used:2881872
Compressed Class Space total:524288 used:309080
Par Eden Space total:8388608 used:1359440
Par Survivor Space total:1048576 used:0
CMS Old Gen total:10485760 used:6291472
印刷GCロゴの設定
-XX:+PrintFlagsFinal -XX:+PrintGCDetails -Xloggc:./gc.log
[gcviewer]をダウンロード(https://sourceforge.net/projects/gcviewer/)gcログを表示し、gcviewerを起動する
java -jar gcviewer-1.36-SNAPSHOT.jar
gc logを開くと分析できます