Java JVM热点上的PrintAssembly选项已启用,但未显示任何程序集跟踪
我正在研究英特尔i386,Ubuntu 14。Java JVM热点上的PrintAssembly选项已启用,但未显示任何程序集跟踪,java,jvm,jvm-hotspot,Java,Jvm,Jvm Hotspot,我正在研究英特尔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) public class MyClass{ public static void main(St
$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)
public class MyClass{
public static void main(String [] args){
int a = 10;
int b = 40;
int c = a + b;
System.out.println("c = "+c);
}
}
如上所述,我已将所需的二进制文件hsdis-i386复制到以下位置
/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/server
及
然后,我跟随博客找到了解决办法,并试图获得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
是
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)
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。因此,所以它说的
PrintAssembly是启用的
,但是它没有显示任何汇编代码。请帮我指出我所犯的错误。在JVM中,热方法是在多次运行后编译的。e、 g.使用默认值-XX:CompileThreshold=10000
,方法在被调用10000次后的一段时间将在后台编译为本机代码
您的代码运行不足,无法编译。我建议您使用-XX:+printcomilation
查看正在编译哪些方法
$ 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 -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)
那么,这方面的命令应该是什么呢?请您详细说明一下好吗?我的意思是,我应该如何在命令行上使用
-XX:+printcomployment
选项?@user1612078,就像您提到的其他JVM选项一样。好吧,谢谢,尽管这个命令没有显示任何不同,但它确实显示了如果我运行一个大循环的程序,其迭代次数超过10000次。@user1612078您可以将其设置为一个较小的数字,您可以尝试=1
。