16

私たちの GC は懸命に働いており、短縮したい一時停止がいくつかあります。実際の JVM GC 引数を調整する前または調整中に解決したいメモリ割り当ての問題がいくつかあります。

どのオブジェクトが GC の汗をかいているのか知りたいです。

  1. GC が動作するたびに、どのオブジェクトが退避されるかを知る方法はありますか?
  2. GC が動作するたびに、どのオブジェクトがエリア間で移動されるかを知る方法はありますか?
  3. エデンエリアにあるオブジェクトを知る方法はありますか?

私は Jprofiler と Memory Analyzer を幅広く使用しています。ステージング環境で実行中のアプリケーションに関するこの情報を取得したいと考えています。

4

5 に答える 5

4

2 と 3 の場合、アプリケーションの実行セッション中にOracle または OpenJDK実行可能ファイルで-XX:+PrintGCDetailsandフラグを使用できます。-XX:+PrintGCTimeStampsjava

于 2012-11-13T03:32:00.183 に答える
2

ログにこの情報を提供するファイナライズを (おそらくオブジェクトに) 追加するために、おそらくいくつかのバイト コード インストルメンテーションを使用しようとします。

于 2012-11-13T05:33:31.190 に答える
2

実行中の JVM でメモリ割り当てを見つけるには、多大な労力が必要になる場合があります。

代わりに、ホットスポットのソース コードをチェックアウトし、GC または割り当て時に独自のログを追加できます。所有するホットスポットをコンパイルし、ログを追跡します。


を使用すると-XX:+PrintCompilation役立ちます。

フラグの-XX:+PrintCompilation出力は次のようになります。

1  sb   java.lang.ClassLoader::loadClassInternal  (6 bytes)     
2  b    java.lang.String::lastIndexOf  (12 bytes)
3  s!b  java.lang.ClassLoader::loadClass  (58 bytes)

フラグは次のものに対応します。

b    Blocking compiler (always set for client)  
*    Generating a native wrapper    
%    On stack replacement   
!    Method has exception handlers  
s    Synchronized method    

詳細.

于 2012-11-13T02:36:40.237 に答える
2

質問 1 では、 ファントム リファレンスを使用できます。これにより、オブジェクトが GC された (または GC 可能になった) ときに通知を受けることができます。

残りの 2 つについては、よくわかりません。

于 2012-11-12T15:12:44.017 に答える
1

OldGen スペースの内容: OldGenに存在するオブジェクトを見つけることができます。フル GC の前後にヒストグラムを出力する必要があります-XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC。また、YoungGen コレクションはフル GC の前に実行されるため、これらのヒストグラムには Old 世代のコンテンツが表示されます

時期尚早にプロモートされたオブジェクトの検出:インスタンスが早期にプロモートされているかどうかを判断するには、ヒストグラムを調べて、 に存在すると予想されるクラスと にOldGenのみ表示されるクラスを確認する必要がありますYoungGen。これは自動的に行うことはできません。オブジェクトが一時的なものかどうかを判断するには、各クラスとそのインスタンスの目的について推論する必要があります。

YoungGen/Eden スペースのコンテンツ:どのオブジェクトが Eden に存在するかを区別する方法を見つけられませんでした。おそらくご存じのとおり、jProfilerMemoryAnalyzerはヒープをダンプできますが、オブジェクトがどの領域に存在するかはわかりません。ただし、定期的にヒストグラムのスナップショットを取得し、出力を解析して最も速く成長するインスタンスを通知する簡単なスクリプトを作成することもできますjmap -histo $pid

于 2012-12-19T07:20:01.153 に答える