java - 指示 JVM validator 何时验证类

标签 java jvm bytecode

使用 java 命令运行 java 程序时,您可以使用 -verbose 指定 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]

等等

对于那些“你不需要这个”的人,“你为什么要这样做”的答案。这只是出于纯粹的兴趣,但仍然值得质疑。

最佳答案

正如 @Antimony 所建议的,要查看类何时被验证,需要在重新编译之前修改正在使用的 JVM 的源代码。

Oracles HotSpot vm 源已经有许多日志行来指示验证的不同阶段,并且可以通过更改来启用它们

ClassVerifier::_verify_verbose;

为真

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

关于java - 指示 JVM validator 何时验证类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567888/

相关文章:

java - 我应该如何处理具有许多无效 URL 的代理 HTTP 请求

java - Nlog(logN)、NlogN、Nlog(N^2) 是否具有等效的运行时间?

java - 不适用于参数

java - 在没有 -XX 的情况下卸载标准输出日志中的类消息 :+CMSClassUnloadingEnabled

java - 为什么会抛出OOM?

java - XX 的默认值 :MaxDirectMemorySize

python - 为什么类定义总是产生相同的字节码?

java - 如何使用 ASM 访问器检查堆栈?

java - 类(class)的执行数据不匹配+ Jacoco

java - 如何在java中将Map<String,TreeMap<String,String>> String转换为Json对象?