2012-05-12 12 views
1

При запуске java-программы с использованием команды java вы можете указать опцию verbose с -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

Что с [все] (http://stackoverflow.com/questions/10562876/responsabilities-of-jvm-bytecode-verifier) ​​verifier вопросы [внезапно] (http://stackoverflow.com/questions/10563569/jvm-verifierification-when-is -это исполненный)? Есть ли какие-то викторины где-то или что-то еще? –

+0

Выполняется, когда класс загружается и имеет право использовать его во время процесса связывания. Спецификация JVM не указывается при верификации, но она должна иметь место перед инициализацией класса. AFAIK нет тривиального способа изучить этот шаг кросс-платформенным способом. –

+0

А как насчет кросс-платформенного способа? У меня есть доступ к окнам linux и osx –

ответ

0

Как показано в предложении @Antimony, чтобы увидеть, когда проверяются классы, необходимо изменить источник JVM, который используется перед перекомпиляцией.

источник

оракулы HotSpot VM уже имеет многочисленные лесозаготовительных линии, обозначающие различные этапы проверки, и они могут быть разрешены путем изменения

ClassVerifier::_verify_verbose; 

к истинным в

/openjdk/hotspot/src/share/vm/classfile/verifier.cpp