2012-01-11 16 views
2

Javaプロセスのヒープ・ダンプからのオブジェクトの作成時間を(おおよそ)把握する方法はありますか?ヒープ・ダンプからのオブジェクト作成時間

私はコードにアクセスできないと思っており、指定されたダンプで作業する必要があります。だから、コンストラクタにタイムスタンプを入れることはできません。

+0

コンストラクタを呼び出すことを意味しますか? – Santosh

+0

コンストラクタの起動時間またはコンストラクタの終了後 - それは私にとって重要ではありません。 – Fakrudeen

+0

ダミーテキストを置くのではなく(多くの人に迷惑をかける)、問題をより詳しく説明してください。それが必要な理由を伝えるだけで十分でした。 – Mat

答えて

1

は、いくつかの提案をしています。

(起動後、5分後、手動でバグをトリガする前、手動でバグをトリガした後など)非常に粗い時間分解能が必要な場合は、いくつかのダンプを取って比較することができます。

エージェントを追加してシナリオを再度実行できる場合は、これを自分でログに記録することができます。 * $ JAVA_HOME/demo/jvmtiディレクトリ*にあるJDKでは、オブジェクト作成の削除を追跡できるサンプルエージェントプログラムheapTrackerがあります。これは、タイムスタンプも含めるように簡単に変更できます。 Tools Interface

0

あなたはこのオブジェクトの作成を開始し、オブジェクトが作成された後、再びそれを呼び出す前に、両方の、長い値に

System.currentTimeMillis() 

ストア、それを使用することができます。

次に、2つを引き算すると、時間がかかります。

注:もっと正確にしたい場合は、ほとんど私が使用しているSystem.nanoTime()を使用することもできます。

+0

これはおおよその解決策ですが、質問には関係ありません。 – fyr

+0

どうしてですか?私はその質問を誤解しましたか?私は、新しいObjectClass()のように、オブジェクトの作成時間を持ちたいと思っていました。 – Lolmewn

+0

彼は、 'javaプロセスのヒープダンプ(heap dump) 'からオブジェクトの作成時間を判断できるかどうかを知りたがっています。 – fyr

0

アプリケーションのすべてのクラスによって拡張されたTimerClassを作成できます。 TimerClassのコンストラクタにtimer属性(java.util.Dateのインスタンス)を配置できます。この属性は、コンストラクタの呼び出し時に初期化されます。オブジェクトが作成された時刻を知りたいときはいつでも、その特定のオブジェクトのタイマーを呼び出すことができます。アプリケーションのすべてのクラスはこのTimerClassから継承されるため、タイマー属性にアクセスできます。

public class TimerClass{ 
    private Date timer; 
    public TimerClass(){ 
     timer = new Date(); 
    } 

    public getTimer(){ 
     return timer; 
    } 

} 
+0

これは私が欲しいものではありません - 私の編集をご覧ください。 – Fakrudeen

+0

私はコメントを投稿した後にそれを見ました。 – Kakarot

0

あなたは、「Javaヒープ解析ツール」を使用しようとしました はそれを見てください、それはあなたの条件を満たしているかどうかを調べます。新しいダンプを作ることができれば、私はここにあなたが与えられたダンプからタイムスタンプを見つけることができると思うが、しません

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html

+0

はい - jhatを使ってヒープダ​​ンプを解析しています。オブジェクトの作成時間を知る方法があるかどうかわかりません。 – Fakrudeen

+0

少なくともjhatが提供するすべてのデフォルトレポートでは、作成タイムスタンプはありません。 – Santosh

関連する問題