0

ガベージコレクションが可能になる前に、さまざまな長さの時間にわたってオブジェクトが存在することを期待しているオブジェクトを使用した、実行時間の長い(数日)アプリケーションがあります。4つのカテゴリがあるとしましょう。

  1. 非常に短命(<1秒)
  2. ユーザーの注意を引く間(1秒<18時間)生きている
  3. 毎日のデータ(〜24h)
  4. 「永遠」(ごくわずか、アプリケーションの寿命)

チューニングを支援するために、Java 6 Hotspot VMを使用して、実際のデータがテニュア世代に取り込まれていることを確認する方法を見つけたいと思います。jmapを使用してHPROFファイルを生成することには、世代情報が含まれていないようです。この情報を取得する別の方法はありますか?

4

1 に答える 1

0

いいえ、個々のオブジェクトの生成情報を取得する簡単な方法はありません。実際、「ライブ」オブジェクトを要求すると、これによりフルGCがトリガーされ、すべてのオブジェクトが古い世代に配置されます(したがって、すべてのオブジェクトがどこにあるかはわかりますが、どこにあったかはわかりません)

フルGCを生き残るオブジェクトは古い世代である可能性が高いため、システムが5分ごとにフルGCを実行する場合、それより長く続くものはほとんど同じです。

最善の方法は、破棄されるオブジェクトを最小限に抑えることです(メモリプロファイラーを使用してください)。これにより、GCのパフォーマンスが向上し、オブジェクトの発生頻度が減少します。極端な例では、オフヒープメモリを使用できます。これは、操作が困難ですが、ヒープがほとんど使用されていません。特に、GBのデータが多い場合に便利です。

于 2012-08-15T14:45:04.320 に答える