1

java コマンドを使用して Java プログラムを実行する場合、詳細オプションを -verbose で指定すると、クラスがいつロードされるかを調べることができます。例えば:

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]

「これは必要ない」「なぜこれをやりたいのか」という答えを避けてください。それは純粋な興味からであり、まだ質問する価値があります.

4

1 に答える 1

0

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

Oracles HotSpot vm ソースには、検証のさまざまな段階を示す多数のログ行がすでにあり、変更することで有効にすることができます。

ClassVerifier::_verify_verbose;

真に

/openjdk/hotspot/src/share/vm/classfile/verifier.cpp
于 2012-06-24T16:34:15.773 に答える