我想查看它正在执行的 JVM 的当前(字节码)指令流。经过一番谷歌搜索后,我发现 jvm 调试版本提供了 -XX:+TraceBytecodes
选项(参见 here )。但是,上面提到的热点 JVM 调试版本的链接已经失效,我无法在线找到调试版本:/
是否有另一种方法可以跟踪 jvm 字节码流,或者有人可以指出正确的方向吗?我正在运行 64 位 ubuntu 16.04。
P.S:我知道,打印出完整的指令流会非常慢。不过,我很好奇
最佳答案
-XX:+TraceBytecodes
选项正是您要找的。它在 HotSpot JVM 的调试版本中可用。您可以自己轻松构建 JVM - 只是 HotSpot,甚至不是 JDK。
从 OpenJDK 8 项目克隆热点存储库
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot
构建“fastdebug”JVM(假设 JDK 已经安装在
/usr/java/jdk1.8.0_102
)cd hotspot/make make ALT_BOOTDIR=/usr/java/jdk1.8.0_102 ARCH_DATA_MODEL=64 fastdebug
您可以添加
HOTSPOT_BUILD_JOBS=N
以在N
个并行进程中运行编译。运行它
export ALT_JAVA_HOME=/usr/java/jdk1.8.0_102 ../build/linux/linux_amd64_compiler2/fastdebug/hotspot -XX:+TraceBytecodes MainClass
关于java - 跟踪 java 字节码流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40257504/