2012-03-29 8 views
19

jvmでクラスがロードおよび破棄されたときの追跡方法を教えてください。 jvmによって公開されているコールバックメソッドはありますか?クラスがロードされ、jvmで破棄されるときを追跡する方法は?

+0

ここで2つの質問をしています。あなたは正確に何を学ぼうとしていますか、達成しようとしていますか?それを理解したら、それを最大限に活用した回答を受け入れてください。 – Frans

答えて

0

静的ブロックを使用してクラスのロードを検出することはできますが、クラスのアンロードは検出できません。 javaでは、システムクラスローダーを介してロードされたすべてのクラスはアンロードされず、他のクラスローダーを介してロードされたすべてのクラスは、クラスローダーがアンロードされたときにのみアンロードされます。あなたは、Javaを介してロードされたクラスを参照することを選択し追加することができます

static{ 

     //execute when the class will be loaded 

    } 
5

:破壊されたクラスについて

java -verbose:class 

、私はわかりません。

0

この情報をアプリケーションに入れたいのですか、それとも外部から分析したいだけですか?後者の場合は、おそらくVisualVMを使用することができます。多分あなたの質問はこれに関連しています:Loaded classes in VisualVM

7

command line option-verbose:classをJavaプロセスに追加できます。これにより、ロードされた各クラスについての情報が表示されます。

0

静的コンストラクタでクラスの作成を追跡できます。そして、あなたはそれが私の心配である限り、破壊を追跡することはできません。クラスは、クラスをロードするために使用されたクラスローダーをgcが収集するときにのみアンロードされます。
あなたもこれを読んで興味があるかもしれない:another question on classloaders at StackOverflow

2

JRockit JVMを使用して[OK]をしている場合は、クラスがロードされ、クラスがアンロードされるときに、メソッドをコールバック与える以下のAPIを利用し、作ることができます。
getClassLibrary()メソッドを使用するはずのJVMクラスをご覧ください。クラス名を与え、我々はイベントをクラスロードのリスナーを登録することができますclassLibraryオブジェクト上
など

21

は、Sun/OracleのJVMを使用している場合は、TraceClassLoadingTraceClassUnloadingオプションを使用することができます。

java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version 

これらのオプションがサポートされている場合は、-XX:+TraceClassLoading -XX:+TraceClassUnloadingを使用してJavaアプリケーションを実行します。あなたのJVMがサポートするオプションを参照するには、次のように使用します。

[Loaded ... from ...] 
[Unloading class ...] 
関連する問題