Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JVM热点上的PrintAssembly选项已启用,但未显示任何程序集跟踪_Java_Jvm_Jvm Hotspot - Fatal编程技术网

Java JVM热点上的PrintAssembly选项已启用,但未显示任何程序集跟踪

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

我正在研究英特尔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(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