- - PR -
SurvivorRatioについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-31 15:35
Ver.1.4.2
VMでGCの調整を行おうと思い、調査をしております。 http://docs.sun.com/source/816-6485/pt_chap5.html 上記のページの『Survivor 領域の比率の設定』の項に次の記述があります。
大きい場合に空になるというのはどのような動作を指しているのでしょうか。 ご存知の方がいらっしゃいましたら、教えてください。 | ||||
|
投稿日時: 2007-01-04 09:27
調べたものの確たる資料はありませんでした。
そのため確証はないのですが、以下に文章を見ての私の考えを記述します。 誤りがありましたら指摘をお願いします。 >皆様
「Survivor 領域が大きすぎる」ということは裏を返せば「Eden領域が小さすぎる」ということだと思えます。 ここで着目すべきはSurvivor領域がEden領域を超えることはないという事実です。 領域がまっさらな状態で1つのオブジェクトを生成することを想像してみてください。 このオブジェクトは生成時にEden領域を超える領域を必要とするとします。 生成を行うとEden領域をオーバーするため、GCは別の領域へコピー法によるGCを行おうとしますが Survivor領域はEden領域よりも小さいためコピー先にはなりえません。 このため直接OLD領域へ移動するかOutOfMemoryをだすことになるはずです。 このような経路を経るためにSurvivor領域は使用されず、結果、空になります。 | ||||
|
投稿日時: 2007-01-15 15:32
暁さんありがとうございました。
お返事が遅れまして、申し訳ありません。
現在、Old:New:Survivor=4:2:1で構成しています。 これが大きすぎるに該当するかなとも思っての投稿でした。 とりあえずSurvivorが空になるということもなくほぼマイナーGCで 動作しているのでこのまま様子を見ようと思います。 | ||||
|
投稿日時: 2007-01-17 22:30
大きいかなと思いますが、チューニングに黄金率はありませんからね。 Survivor領域が大きいとNew領域でのGC頻度が高くなり、その実行時間も長くなりがちになります。 その傾向が見られないということであれば大丈夫ではないでしょうか。 IBMやHPなどの企業ページで記された数値を参考にするのもありかと思います。 | ||||
|
投稿日時: 2007-01-17 22:55
一応、ピーク時中心にVisualGCで眺めて決めてます。
いろいろインターネットで検索したり本を見たりして、 マイナーGC:フルGCが10:1を目標にして調整しました。 載っているアプリの改修にも目処がついてきたので 徐々にSurvivorRatioを上げていこうと思っています。 # アプリがメモリを離すのが速くなれば、落としどころは6くらいカナと思っています。 パラレルGCやコンカレントGCもやってみましたが、CPUが少ないのと VMが複数上がっているためか、思ったほど効果がありませんでした。 # 体感ですが
アプリの改修もあるので気長にがんばろうと思います。ありがとうございました。 |
1