Comment utilisez -XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=option d'impression avec la JVM HotSpot
Je m 'en essayant d'utiliser -XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=print,*MyClass.myMethod
lignes de commande comme décrit dans ce post.
Il semble que c'est ça qui est disponible avec open-jdk
(https://wikis.oracle.com/display/HotSpotInternals/PrintAssembly).
Comment puis-je utiliser ces options (ou similaire équivalents) avec oracle JDK7 et la JVM HotSpot?
- il n'a pas l'air trop difficile d'essayer
- L'Ofc j'ai essayé mais ça ne fonctionne pas, ma question est de savoir comment faire leur travail? Je vais modifier.
- Avez-vous essayé "Si vous n'obtenez pas de sortie, utilisez -XX:+PrintCompilation pour vérifier que votre méthode est d'obtenir compilé à tous."
- Oui ce n'est rien juste une ligne de nombre comme avec les options ci-dessus. Par la façon dont cette doc est pour openjdk. Je pense qu'il ne fonctionne pas avec Java HotSpot. J'essaie de trouver un équivalent.
Vous devez vous connecter pour publier un commentaire.
Ces instructions s'appliquent à Linux (Ubuntu 10.04.4 LTS), mais devraient être applicables à votre système d'exploitation. Après le téléchargement Oracle JDK 7u3 et de manière appropriée le réglage de votre
JAVA_HOME
etPATH
variables d'environnement, exécutez la commande suivante pour vérifier les options disponibles:Vous devriez voir le
UnlockDiagnosticVMOptions
,CompileCommand
etPrintAssembly
options sont disponibles. À l'aide de laCompileCommand
option permettra également dePrintAssembly
option. Toutefois, vous aurez besoin de le HotSpot désassembleur plugin pourPrintAssembly
de travail; sans elle, vous pourriez voir quelque chose comme ce qui suit:Pour obtenir le HotSpot désassembleur plugin, vous aurez besoin de le construire. En regardant les OpenJDK 7u2 source, le hsdis readme du plugin dit:
Nous ont confirmé ci-dessus que l'Oracle JDK 7u3 prend en charge
PrintAssembly
. J'ai suivi le hsdis plugin readme instructions, téléchargé GNU binutils 2.22, placé dans le hsdisbuild/binutils
répertoire et a courumake
. Ce qui a finalement produit l'erreur suivante:Pour corriger cela, j'ai changé hsdis.c en utilisant le patch suivant:
De course
make
a ensuite été couronnée de succès. Maintenant, il suffit de copier lehsdis-i386.so
plugin dans le hsdisbuild
répertoire de l'Oracle JDK 7u3jre/lib/i386
répertoire.Maintenant, vous pouvez voir l'démonté le code compilé:
La classe de test que j'ai utilisé est:
binutils
ses l'ensemble du répertoire sont juste le sous-répertoire nommé binutils?The makefile looks for the sources in build/binutils or you can specify it's location to the makefile using BINTUILS=path.
build/binutils
est relatif au répertoire de la hsdis les fichiers sont en. À partir de ce répertoire, vous pouvez essayer quelque chose commemkdir build ; cd build ; wget -O - http://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.bz2 | tar xjvf - ; ln -s binutils-2.2.22 binutils
. Ou essayezBINUTILS=path_to_where_you_extracted_binutils make
.ln -s binutils-2.22 binutils
plutôt queln -s binutils-2.2.22 binutils
, mais à part ça, génial.dans mon cas, pour voir le démonté le code compilé:
dans l'exemple ci-dessus, a est cycle:
for (int i = 0; i < 1 000 000; i++) {...}
,c'est pourquoi, dans notre cas, sans 1 000 000 d'itérations, nous avons besoin
-XX:CompileThreshold=1
option (par défaut 10 000 pour -serveur) pour voir notre démonté le code compilé.