gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:48 26 4
gpt4 key购买 nike

我正在使用 intel i386,Ubuntu 14。$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 is enabled,但是它没有显示那里的任何汇编代码。请帮我指出我正在做的错误。

最佳答案

在JVM中,热方法是在运行多次后才被编译的。例如使用默认的 -XX:CompileThreshold=10000,方法将在调用 10000 次后的某个时间在后台编译为 native 代码。

您的代码运行不足,无法编译。我建议您使用 -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)

关于java - JVM Hotspot 上的 PrintAssembly 选项已启用但未显示任何程序集跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com