This is with the Oracle JDK 7, on Ubuntu 12.10, but should work similarly elsewhere.
To get the assembly code print out of your java process add the following options to your Java command line:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly ...Which doesn't work :( :
Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional outputSo where do you get hsdis-amd64.so? and where should you put it?
Could not load hsdis-amd64.so; library not loadable; PrintAssembly is disabled
- Project Kenai got different versions for download, pick the one that matches your OS.
- Rename it to hsdis-amd64.so and put it under /usr/lib/jvm/java-7-oracle/jre/lib/amd64/ the actual path on your machine may differ if you installed your JDK in another method/put it elsewhere etc.
You may only be interested in the assembly generated for a particular method though. To only get output for particular methods you can use the -XX:CompileCommand=print,*.Foo.bar option. Be aware that the output may not reflect the running code if the method gets further inlined to a particular callsite. You can verify by looking at the -XX:+PrintInlining output to see if the method gets inlined.
Update 18/04/2013: For MacOS you'll need to get the version here and similarly copy it to your JAVA_HOME/jre/lib:
sudo mv ~/Downloads/hsdis-amd64.dylib /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/jre/lib/hsdis-amd64.dylibUpdate 19/04/2013: To get intel syntax over AT&T, use -XX:PrintAssemblyOptions=intel (learnt this today after having a read of Jean-Philippe BEMPEL blog, he covered this topic a few months before I did and his instructions cover Windows as well, great blog)
Update 10/02/2014: Also notable on this topic is JITWatch, a dissassembly log analysis UI to correlate the print assembly output with your code (and more)
Update 12/02/2015: A further observation sent my way by Jason Nordwick:
"If you are on 64-bit OpenJDK, hsdis from Kenai will crash. You need to download and build a working copy yourself. Here is the questions I posed (and answered myself a little later) on AskUbuntu SO:
Thanks Jason!
Update 09/01/2017: Turns out there's a very detailed answer on SO these days, in particular on how to build hsdis and the Windows variant usage:
http://stackoverflow.com/questions/1503479/how-to-see-jit-compiled-code-in-jvm?rq=1
I'll be the first to comment then. Thankyou very much sir.
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDeleteAnything for Windows? I have Windows 7.
ReplyDeleteSee this post: http://jpbempel.blogspot.co.za/2012/10/how-to-print-dissasembly-from-jit-code.html
DeleteWhat are the limitations of hsdis-amd64.so? For instance, do you know if it can interpret new AVX-512 instructions such as VREDUCEPS, VREDUCEPD, VREDUCESS, VREDUCESD?
ReplyDeleteFound how to install hsdis-amd64.so on Ubuntu using `apt-get install libhsdis0-fcml` here https://askubuntu.com/a/892413/764912
ReplyDelete