2013-12-23 3 views
6

JVMオプション:予想通りJVMの合計メモリが-Xmxよりも大きく割り当てられているのはなぜですか?

-Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8

、JVMは、JVMのヒープのために、ほぼ20メガバイトのメモリを割り当てます。

しかし、以下GCの詳細を参照してください

PSYoungGen合計9216K、4612K [0x00000000ff600000、0x0000000100000000、0x0000000100000000)
エデンスペース8192K、56%が使用される[0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000を使用)
空間から1024K、0%使用[0x00000000fff00000,0x00000000fff00000,0x0000000100000000]
からsペース 1024K、0%が使用[0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
PSOldGen合計8192K使用10240Kは、[0x00000000fec00000、0x00000000ff600000、0x00000000ff600000)
オブジェクト空間10240K、80%が使用される[0x00000000fec00000,0x00000000ff400020,0x00000000ff600000) PSPermGen 21248K合計、14%が[0x00000000f9a00000,0x00000000f9cf6708,0x00000000faec0000)

のサイズを使用3033K [0x00000000f9a00000、0x00000000faec0000、0x00000000fec00000)
オブジェクト空間21248Kを使用若い世代は、オプション-Xmnで期待通りです。 エデンスペースおよび生存スペース若い世代のサイズの比率は、オプション-XX:SurvivorRatio=8に対して予想通りです。 しかし、は合計で約40MBのメモリを割り当てられたJVMのようですので、それは変です。なぜJVMの合計メモリが-Xmxより大きくなっていますか?

ENV:

OS:Win7の64ビット

JDK:1.6.0_43-B01の64ビットを構築

答えて

11

-Xmxは、それが合計である、ホットスポットオブジェクト・ヒープの最大サイズを設定しますYoungGen(Eden + Survivor-spaces)とOldGenの合計は約20 MBです。永続世代は、-XX:MaxPermSizeオプションで制御される別のメモリ領域にこのヒープの外部に存在します。

+0

これは、ヒープが2世代に分割されていることを意味します:YoungGenとOldGen、PermGenは含まれていませんか? –

+0

@LipingHuangはい、それは正しいです。ヒープは*若い世代*、PSYoungGen、*旧世代*、PSOldGenに分かれています。ヒープには* permanent generation *、 'PSPermGen'が含まれていません。ちなみに、 'PS'は* parallel scavenge collector *(' -XX:UseParallelGC'を使って有効になります)の略です。 – DontDivideByZero

+0

@LipingHuang *若い世代*は、* eden space *と* space *と* space *と呼ばれる* survivor spaces * *にさらに分かれています。しかし、ここで議論されているように、*生存者スペース*の1つのみが*若い世代***の記載されたサイズに貢献しています(http://stackoverflow.com/q/283​​47161/3460717)。 – DontDivideByZero

関連する問題