3

オブジェクトが原因で、ある時点で例外が発生した時点で、アプリケーションで多くの処理が行われているという要件があります。今、私はそのオブジェクトの全歴史を知りたいと思っています. アプリケーションが開始されてからの期間にそのオブジェクトで何が起こったのかを意味します。

とにかくJMXなどを使用して、このオブジェクトの履歴を覗き見することは可能ですか?

ありがとう

4

4 に答える 4

2

一言で言えば:いいえ

さらにいくつかの言葉を添えて:

JVM は、ガベージ コレクションに関連するごくわずかな情報と、HotSpot オプティマイザーに必要ないくつかのメソッド呼び出しメトリックを除いて、現在の状態を過ぎたオブジェクトの履歴を保持しません。そうしないと、処理とメモリのオーバーヘッドが膨大になります。粒度の問題もあります。フィールドの変更のみをログに記録しますか? すべてのメソッド呼び出し?メソッド呼び出し中のすべての CPU 命令? JVM は単純に簡単な方法を取り、上記のことは何もしません。

そのオブジェクトのクラスや特定のインスタンスを分離し、必要な操作を自分でログに記録する必要があります。おそらく手動で行う必要があります-実行時にログコードを挿入できるバイトコード計測ライブラリをまだ見つけていません...

または、計測プロファイラーを使用できる場合もありますが、その場合、パフォーマンスが大幅に低下することを覚悟しください。

于 2012-06-14T09:28:51.303 に答える
1

これは、標準の Java (または私が知っている他のプログラミング言語) では不可能です。アプリケーションに十分なログを追加する必要があります。これにより、何が起こったのかをある程度把握できます。また、まだ方法がわからない場合は、IDE のデバッガーの使い方を学んでください。

于 2012-06-14T09:27:41.817 に答える