编程语言
首页 > 编程语言> > java-启用了JVM Hotspot上的PrintAssembly选项,但未显示任何程序集跟踪

java-启用了JVM Hotspot上的PrintAssembly选项,但未显示任何程序集跟踪

作者:互联网

我正在使用Intel i386,Ubuntu14.$java -version显示的OpenJDK版本信息是

java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.2) (7u65-2.5.2-3~14.04)
OpenJDK Server VM (build 24.65-b04, mixed mode)

如前所述,我已将here二进制文件hsdis-i386.so复制到以下位置

/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/server

/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/client

然后,我跟随this博客解决,并尝试获取Java程序的汇编代码.我使用下面的命令来测试示例Java程序MyClass.java

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:PrintAssemblyOptions=hsdis-print-bytes -XX:CompileCommand=print,MyClass MyClass

我在控制台上收到的消息是

OpenJDK Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
CompilerOracle: unrecognized line "print Test"
c = 50

MyClass.java在哪里

public class MyClass{
  public static void main(String [] args){
    int a = 10;
    int b = 40;
    int c = a + b;
    System.out.println("c = "+c);
  }
}

根据我的理解并查看上面的消息,jvm能够找到hsdis-i386.so,因此它说启用了PrintAssembly,但是它并未显示任何汇编代码.请帮助我指出我正在做的错误.

解决方法:

在JVM中,热方法在运行了很多次之后才被​​编译.例如如果使用-XX:CompileThreshold = 10000(默认值),则在调用10000次后的某个时间,方法将在后台编译为本地代码.

您的代码运行不足,无法进行编译.我建议您使用-XX:PrintCompilation来查看正在编译的方法.

当我运行以下命令时,输出为

$java -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

但是当我添加-XX:PrintCompliation时,我看到了一种被编译的方法.

$java -XX:+PrintCompilation -version
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
     43    1       3       java.lang.String::equals (81 bytes)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

标签:jvm,jvm-hotspot,java
来源: https://codeday.me/bug/20191028/1953767.html