Javaプロセスのヒープ・ダンプからのオブジェクトの作成時間を(おおよそ)把握する方法はありますか?ヒープ・ダンプからのオブジェクト作成時間
私はコードにアクセスできないと思っており、指定されたダンプで作業する必要があります。だから、コンストラクタにタイムスタンプを入れることはできません。
Javaプロセスのヒープ・ダンプからのオブジェクトの作成時間を(おおよそ)把握する方法はありますか?ヒープ・ダンプからのオブジェクト作成時間
私はコードにアクセスできないと思っており、指定されたダンプで作業する必要があります。だから、コンストラクタにタイムスタンプを入れることはできません。
は、いくつかの提案をしています。
(起動後、5分後、手動でバグをトリガする前、手動でバグをトリガした後など)非常に粗い時間分解能が必要な場合は、いくつかのダンプを取って比較することができます。
エージェントを追加してシナリオを再度実行できる場合は、これを自分でログに記録することができます。 * $ JAVA_HOME/demo/jvmtiディレクトリ*にあるJDKでは、オブジェクト作成の削除を追跡できるサンプルエージェントプログラムheapTrackerがあります。これは、タイムスタンプも含めるように簡単に変更できます。 Tools Interface
あなたはこのオブジェクトの作成を開始し、オブジェクトが作成された後、再びそれを呼び出す前に、両方の、長い値に
System.currentTimeMillis()
ストア、それを使用することができます。
次に、2つを引き算すると、時間がかかります。
注:もっと正確にしたい場合は、ほとんど私が使用しているSystem.nanoTime()
を使用することもできます。
アプリケーションのすべてのクラスによって拡張されたTimerClassを作成できます。 TimerClassのコンストラクタにtimer属性(java.util.Dateのインスタンス)を配置できます。この属性は、コンストラクタの呼び出し時に初期化されます。オブジェクトが作成された時刻を知りたいときはいつでも、その特定のオブジェクトのタイマーを呼び出すことができます。アプリケーションのすべてのクラスはこのTimerClassから継承されるため、タイマー属性にアクセスできます。
public class TimerClass{
private Date timer;
public TimerClass(){
timer = new Date();
}
public getTimer(){
return timer;
}
}
あなたは、「Javaヒープ解析ツール」を使用しようとしました はそれを見てください、それはあなたの条件を満たしているかどうかを調べます。新しいダンプを作ることができれば、私はここにあなたが与えられたダンプからタイムスタンプを見つけることができると思うが、しません
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html
コンストラクタを呼び出すことを意味しますか? – Santosh
コンストラクタの起動時間またはコンストラクタの終了後 - それは私にとって重要ではありません。 – Fakrudeen
ダミーテキストを置くのではなく(多くの人に迷惑をかける)、問題をより詳しく説明してください。それが必要な理由を伝えるだけで十分でした。 – Mat