- PR -

SurvivorRatioについて

1
投稿者投稿内容
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2006-12-31 15:35
Ver.1.4.2
VMでGCの調整を行おうと思い、調査をしております。

http://docs.sun.com/source/816-6485/pt_chap5.html
上記のページの『Survivor 領域の比率の設定』の項に次の記述があります。

引用:

Survivor 領域が小さすぎると、高速コピーによるコレクションがオーバーフローし、その分が Old 世代に送られてしまいます。Survivor 領域が大きすぎると、この領域は空になってしまいます。



大きい場合に空になるというのはどのような動作を指しているのでしょうか。
ご存知の方がいらっしゃいましたら、教えてください。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2007-01-04 09:27
調べたものの確たる資料はありませんでした。
そのため確証はないのですが、以下に文章を見ての私の考えを記述します。
誤りがありましたら指摘をお願いします。 >皆様
引用:
Survivor 領域が大きすぎると、この領域は空になってしまいます。


「Survivor 領域が大きすぎる」ということは裏を返せば「Eden領域が小さすぎる」ということだと思えます。
ここで着目すべきはSurvivor領域がEden領域を超えることはないという事実です。
領域がまっさらな状態で1つのオブジェクトを生成することを想像してみてください。
このオブジェクトは生成時にEden領域を超える領域を必要とするとします。
生成を行うとEden領域をオーバーするため、GCは別の領域へコピー法によるGCを行おうとしますが
Survivor領域はEden領域よりも小さいためコピー先にはなりえません。
このため直接OLD領域へ移動するかOutOfMemoryをだすことになるはずです。
このような経路を経るためにSurvivor領域は使用されず、結果、空になります。
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2007-01-15 15:32
暁さんありがとうございました。
お返事が遅れまして、申し訳ありません。

引用:

「Survivor 領域が大きすぎる」ということは裏を返せば
「Eden領域が小さすぎる」ということだと思えます。



現在、Old:New:Survivor=4:2:1で構成しています。
これが大きすぎるに該当するかなとも思っての投稿でした。
とりあえずSurvivorが空になるということもなくほぼマイナーGCで
動作しているのでこのまま様子を見ようと思います。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2007-01-17 22:30
引用:
現在、Old:New:Survivor=4:2:1で構成しています。
これが大きすぎるに該当するかなとも思っての投稿でした。


大きいかなと思いますが、チューニングに黄金率はありませんからね。
Survivor領域が大きいとNew領域でのGC頻度が高くなり、その実行時間も長くなりがちになります。
その傾向が見られないということであれば大丈夫ではないでしょうか。
IBMやHPなどの企業ページで記された数値を参考にするのもありかと思います。
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2007-01-17 22:55
一応、ピーク時中心にVisualGCで眺めて決めてます。
いろいろインターネットで検索したり本を見たりして、
マイナーGC:フルGCが10:1を目標にして調整しました。

載っているアプリの改修にも目処がついてきたので
徐々にSurvivorRatioを上げていこうと思っています。
# アプリがメモリを離すのが速くなれば、落としどころは6くらいカナと思っています。

パラレルGCやコンカレントGCもやってみましたが、CPUが少ないのと
VMが複数上がっているためか、思ったほど効果がありませんでした。
# 体感ですが

引用:

大きいかなと思いますが、チューニングに黄金率はありませんからね。


アプリの改修もあるので気長にがんばろうと思います。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)