2012-05-12 9 views
1

javaコマンドを使用してJavaプログラムを実行する場合は、-verboseオプションを指定して、クラスのロード時に検査できます。例:JVM Verifierがクラスを検証するタイミングを示す

java -verbose Test | grep "file:" 
[Loaded Test from file:/Users... ] 
[Loaded C1 from file:/Users... ] 
[Loaded A1 from file:/Users... ] 
[Loaded B1 from file:/Users...] 
[Loaded C2 from file:/Users...] 

確認段階がいつ発生するかを示す方法はありますか?クラスの検証は、必ずしもクラスをロードした直後ではありません。例えば、このようなものが理想的である:

java -verbose Test | grep "file:" 
[Loaded Test from file:/Users... ] 
[Loaded C1 from file:/Users... ] 
[Loaded A1 from file:/Users... ] 
[Loaded B1 from file:/Users...] 
[Verified C1] 
[Loaded C2 from file:/Users...] 
[Verified C2] 

など

「あなたはこれを必要といけない」これらの病棟に、解答「なぜあなたはこれをしたいと思います」。純粋な関心から逸脱しており、依然として質問に値する。

+3

でtrueに

ClassVerifier::_verify_verbose; 

を変更することで有効にすることができ、[すべて]( http://stackoverflow.com/questions/10562876/responsibilities-of-jvm-bytecode-verifier)ベリファイアの質問[すべて突然](http://stackoverflow.com/questions/10563569/jvm-verifierification-when-is) - 実行 - )?どこか何かのクイズがありますか? –

+0

クラスがロードされ、リンク処理中に使用できるときに実行されます。 JVM仕様では、検証が行われるときは指定されていませんが、クラスが初期化される前に実行する必要があります。 AFAIKでは、このステップをクロスプラットフォームの方法で調べる簡単な方法はありません。 –

+0

クロスプラットフォームではないのはどうですか?私は窓linuxとosxにアクセスしている –

答えて

0

@Antimonyは、クラスの検証時に、再コンパイルする前に使用されているJVMのソースを変更する必要があることを確認しました。

神託HotSpot VMのソースは、すでに検証のさまざまな段階を示すために、数多くのログラインを持っており、彼らは何ですか

/openjdk/hotspot/src/share/vm/classfile/verifier.cpp 
関連する問題