2015-02-27 3 views
2

Je travaille sur i386 intel, Ubuntu 14. Les informations version OpenJDK montré par $java -version estl'option PrintAssembly sur la JVM Hotspot est activé mais ne montrant aucune trace de montage

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) 

Comme mentionné here j'ai copié le fichier binaire requis hsdis-i386.so aux endroits suivants

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

et

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

Ensuite, j'ai suivi this blog pour contourner le problème et essayer d'obtenir un code d'assemblage d'un programme Java. Je ci-dessous commande pour tester un programme java exemple MyClass.java

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

Le message que je suis arrivé sur la console est

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

MyClass.java est

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

Selon ma compréhension et regarder ci-dessus message, jvm est en mesure de localiser hsdis-i386.so et ainsi de dire PrintAssembly is enabled, mais il ne montre aucun code d'assemblage ou t là. S'il vous plaît aidez-moi à souligner l'erreur que je fais.

Répondre

3

Dans la JVM, les méthodes chaudes sont compilées après plusieurs exécutions. par exemple. avec un -XX:CompileThreshold=10000 qui est la valeur par défaut, une méthode sera compilée en code natif en arrière-plan quelque temps après avoir été appelée 10000 fois.

Votre code n'est pas exécuté suffisamment pour être compilé. Je vous suggère d'utiliser -XX:+PrintCompilation pour voir quelles méthodes sont en cours de compilation.

Quand je lance ce qui suit, la sortie est

$ 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) 

mais quand j'ajoute -XX:+PrintCompliation je vois une méthode qui est compilée.

$ 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) 
+0

Eh bien, quelle devrait être la commande pour cela? Pourriez-vous élaborer un peu? – user1612078

+0

@ user1612078 quelle commande pour quoi? –

+0

Je veux dire, comment devrais-je utiliser l'option '-XX: + PrintCompilation'? – user1612078