2017-09-28 7 views
4

最近、私はいくつかのコードの最適化に取り組んでいます(計算時間と最大メモリが必要です)。メモリコストを最適化する可能性があるかどうかを知るために、私はJProfilerを使用します。 通常JProfilerでGCアクティビティグラフを解釈するには?

  • それはスパイクだ場合、それが高いかどう、私は
  • グローバルに削減しようとする必要があり、私は今

中間オブジェクトの作成を削減しようとする必要があり、私は第2の状況にいる、とGCアクティビティグラフにスパイクが表示されますが、それはすべて2%未満です(下の画像を参照)。私はそれをどのように理解するべきですか?

デフォルトでは、GCアクティビティ曲線の合計/積分は、データを収集するために使用されたCPUの合計パーセントの推定値です。だからここでは最大2%よりはるかに少ないことを意味するでしょう

それは正しいですか?何か不足していますか?デフォルトでは

enter image description here

+0

画像を追加できますか?また、GCアクティビティの詳細なGC解釈が必要な場合は、gcロギングを有効にして[gcviewer](https://github.com/chewiebug/GCViewer)を通じて実行してください。 – the8472

+0

イメージを追加しました。私はgcのロギング機能を認識していません、それは何ですか? –

+0

gcログは、GC全体のパフォーマンスに関するより詳細な統計情報を提供します。 jprofilerは、オブジェクトグラフや割り当てサイトの分析に適しています。集約動作をよりよく理解したい場合は、gcログを解釈することでより多くの洞察を得ることができます。何がどこに割り当てられているのかを知りたければ、プロファイラがより良い選択となります。答えのために – the8472

答えて

2

、私の理解では、GC活性曲線の総和/ INTEGRALEは、データを収集するために使用されるCPUの合計パーセントの推定値であるということです。

はい。最大2%がここに欺瞞的である

maxよりもはるかに少ないを意味しますので、ここで

。サンプリング間隔を十分に小さくすると、最大値はGCingに費やされるタイムスライスの100%になります。つまり、そのスライスがGCの一時停止期間よりも短い場合です。したがって、これらのピークは、すでにいくつかのより大きなタイムスライスにわたって平均しています。

どうすればよいですか?

あなたのアプリケーションがおそらくGCに多くの時間を費やしていないということです。しかし、あなたのグラフは比較的短い時間しかカバーしないので、主要なコレクションやコンカレントサイクルを反映していないかもしれません。 JVMのGCログの解釈は、スループットだけでなくレイテンシを気にするならば、より詳細な情報を提供します。デフォルトでは

+0

ありがとう。ここでは、分析コード、1つのコア上の純粋な計算を最適化しています。これは、(配布された)アプリケーションによって1000回と呼ばれる同じコードです。私はアプリケーションを最適化するときにgcのログを調べると思います。不思議なことに、2つのビヘイビア(第1〜第2のハーフ)がありますが、グラフでは同じコードへの反復呼び出しが8つありますが、計算結果ではなく結果値のみを変更する必要がある入力ランダム値があります。 –

4

は、私の理解では、GC 活性曲線の総和/ INTEGRALEは がデータを収集するために使用されたCPUの合計パーセントの推定値であることです。だからここでは最大2%よりもはるかに少ないことを意味するでしょう

これは間違いありませんか?

はい、正しいです。あなたは一時的なオブジェクトが割り当てられている場所を知りたい場合は、

enter image description here

を確認するにはメモリ - >アロケーションコールツリーをライブに行くと生存性モードとして「ごみ収集のオブジェクトを」選択した任意の割り当てスポットに分類または割り当てホットスポットを使用するには、「Show classes」コールツリー分析を使用します。

enter image description here