- PR -

【ガベッジコレクションとメモリ設定?】

1
投稿者投稿内容
Face
常連さん
会議室デビュー日: 2003/06/22
投稿数: 43
投稿日時: 2006-03-08 21:27
現在、Javaアプリケーションの開発を行っているのですが、
VMの設定とGCの結果がどうも一致していないようで困っております。
メモリの設定とGCの出力結果は一致しないものなのでしょうか?

【環境】
WindowsCE 5.0
VM:Jbed EVM

【設定】
-Xms1m (ヒープ最小値)
-Xmx15m (ヒープ最大値)

【GC結果出力】
GC: 269 done, 723036:15236 live,
60156 free, 57032:1 available, 39ms making, 55ms compacting

GC: 270 done, 723036:15236 live,
60156 free, 57032:1 available, 38ms making, 55ms compacting

.........

といった感じで、1秒間に3回ほどのペースでGC処理が
多発(ループのような現象)しております。
生存中のJavaオブジェクトのトータルサイズが723036byte。
生存中のJavaオブジェクトの数は15236個です。
heapのfree memoryのトータルサイズが60156byte。
アロケートできるfree memoryのトータルサイズが57032byte
とでているのですが、VMの引数では20Mまで拡張できるようにしていしている
にも関わらず、拡張しないままGC処理が多発しているように見えます。

なぜこのような現象が起こるのでしょうか?
VMに詳しい方いらっしゃいましたらアドバイスお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-03-09 03:32
どのタイミングでヒープを拡張するかどうかは VM の実装依存です。
VM の仕様には明るくないですが、設定している最大値に達しなければ GC が発生しないことを保証されているわけではないのではないでしょうか。
たとえば、1回のGC時間を短くするために積極的に頻繁にGCを行うようなアルゴリズムもあり得ます。

>とでているのですが、VMの引数では20Mまで拡張できるようにしていしている
-Xmx15m であれば 15MBでは?

パフォーマンス上なにかもんだいとなっているのでしたら VM のベンダに問い合わせてみてはいかがでしょうか。みたところ1回のGCは0.1秒もかかっていないのでそれほど問題にはならないのかと思いますが。
1

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