跟踪java字节码流

use*_*633 1 java jvm

我想看到它正在执行的JVM的当前(字节码)指令流.经过一些googleing,我发现jvm debug build提供了-XX:+TraceBytecodes选项(见这里).但是,提到的热点JVM调试版本的链接已经死了,我无法在线找到调试版本:/

有没有其他方法来跟踪jvm字节码流或有人指出我正确的方向?我正在运行64位ubuntu 16.04.

PS:我知道,打印出完整的指令流会很痛苦.但是,我很好奇

apa*_*gin 8

-XX:+TraceBytecodes选项正是你在寻找什么.它在HotSpot JVM的调试版本中可用.您可以自己轻松构建JVM - 只需HotSpot,甚至不是JDK.

  1. 从OpenJDK 8项目克隆热点存储库

    hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot
    
    Run Code Online (Sandbox Code Playgroud)
  2. 构建'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
    
    Run Code Online (Sandbox Code Playgroud)

    您可以添加HOTSPOT_BUILD_JOBS=NN并行进程运行编译.

  3. 运行

    export ALT_JAVA_HOME=/usr/java/jdk1.8.0_102
    ../build/linux/linux_amd64_compiler2/fastdebug/hotspot -XX:+TraceBytecodes MainClass
    
    Run Code Online (Sandbox Code Playgroud)