2

おそらくばかげた質問が1つあります。私は現在、CSPソルバーchocoとjacopをテストしています。アプリのプロファイリング(グラフ彩色、約3000ノード)を実行すると、結果が完全に理解できません。

プロファイラーによって宣言された使用済みヒープスペースは、約1GBのメモリです。作成されたすべてのオブジェクトの合計は100MB未満です。他の900MBのRAMはどこにありますか?

メソッド呼び出し(ソルバーはおそらく大規模なバックトラッキングを使用します)がスタックに配置されていると思うので、ここでは問題はないはずです。Xmx paramを使用して最大メモリを減らすと、アプリは例外で失敗します。

スレッド「メイン」の例外java.lang.OutOfMemoryError:GCオーバーヘッド制限を超えました

したがって、残りは未使用の未収集メモリではないようです(この場合、GCがメモリの割り当てを解除するため(失敗しないため))。

ご協力いただきありがとうございます。

4

2 に答える 2

1

ヒープのマップを入手できますか?ほとんどの場合、断片化されているため、1億個のオブジェクトがメモリ空間全体に分散しています。必要なメモリは、割り当てられたオブジェクトの機能と、オブジェクトが割り当てられてから参照解除される速度の両方です。このエラーは、メモリ領域が作業負荷に対して小さすぎること、ガベージコレクタがそれを管理するために多くのCPUを消費していること、および許容しきい値を超えたことを意味します。

于 2010-12-26T20:02:02.637 に答える
0

アミール・アフガニはおそらく彼のコメントで正しかったでしょう。Netbeans 6.9.1のクラス(オブジェクト)はおそらく何らかの形でフィルタリングされています(またはプロファイラーが偽物ですか?)。JavaビジュアルVMからヒープダンプを実行して分析すると、非常に!異なる数(合計で使用されたヒープと同じ)。

返信ありがとうございます。

于 2010-12-26T21:13:19.933 に答える