2010-12-26 9 views
2

私はおそらく1つの疑問を持っています。私は現在、CSPソルバーchocoとjacopをテストしています。私はアプリのプロファイリング(グラフ着色、約3000ノード)を実行すると、私は完全に結果を理解していない。Javaで使用されるヒープと割り当てられたオブジェクトのサイズ

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

私はメソッド呼び出し(ソルバーは多分大量のバックトラックを使用しています)がスタック上に配置されていると思いますので、ここでは問題ではありません。スレッド内

例外「メイン」java.lang.OutOfMemoryErrorを::GCオーバーヘッドの制限は

だから、それはそう

を超え、残りは未回収の未使用イマイチことを私はXmxののPARAMを使用して最大メモリを削減すると、アプリは例外で失敗しますメモリ(この場合、GCはそれを排除して失敗することになります)。

ありがとうございました。

+1

Allocated Object Sizeビジュアライザにはフィルタがありませんか?どのプロファイラを使用していますか?また、データが感覚的でない場合は、プロファイラの結果を貼り付けてください。 –

+0

私はnetbeansプロファイラを使用しています - http://img405.imageshack.us/i/profilerd.png/使用されたメモリの最後のポイントは374MBです(まだ割り当てられたオブジェクトよりも)... – malejpavouk

+0

ピーク時(ライブ中結果は)、最大の配列は約30MBです(他のものはそれに比例して小さくなります)... – malejpavouk

答えて

0

Amir Afghaniは、彼のコメントでおそらく正しいでしょう。 Netbeans 6.9.1のクラス(オブジェクト)は、おそらく何らかの形でフィルタリングされています(?またはプロファイラは偽です)。なぜなら、私はJava Visual VMからヒープダンプを実行して分析したので、異なる数(合計は使用済みヒープと同じです)。

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

+0

おそらく偽ではないでしょう。文字列、またはchar []の、または何か他のものを表示する –

1

ヒープマップを入手できますか?おそらく断片化されているので、100Mのオブジェクトがメモリ空間全体に広がっています。必要なメモリは、割り当てられたオブジェクトの関数と割り当てられているオブジェクトの関数です。このエラーは、作業負荷のためにメモリ領域が小さすぎること、ガベージコレクタがそれを管理するCPUを多く消費しており、許容されたしきい値を超えていることを意味します。

+0

これは原因ではありません...エデンでは断片化することは不可能です(2つのスペースがあり、すべてがコレクション中にコピーされています)...そしてテニュアされた世代では、GCはオブジェクトを一緒に揺らして(適切な英語の単語を知らないで)メモリをデフラグしています... – malejpavouk

関連する問題