General usage
As explained by other answers, you can run with the following JVM options:
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
Filter on a specific method
You can also filter on a specific method with the following syntax:
-XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=print,*MyClass.myMethod
Notes:
- you might need to put the second argument within quotes depending on OS etc.
- if the method gets inlined, you could miss some optimisations
How to: Install the required libraries on Windows
If you are running Windows, this page has instructions on how to build and install hsdis-amd64.dll
and hsdis-i386.dll
which are required to make it work. We copy below and extend the content of that page* for reference:
Where to get prebuilt binaries
You can download prebuilt binaries for Windows from the fcml project
How to build hsdis-amd64.dll
and hsdis-i386.dll
on Windows
This version of the guide was prepared on Windows 8.1 64bit using 64-bit Cygwin and producing hsdis-amd64.dll
Install Cygwin. At the Select Packages
screen, add the following packages (by expanding the Devel
category, then clicking once on the Skip
label next to each package name):
make
mingw64-x86_64-gcc-core
(only needed for hsdis-amd64.dll
)
mingw64-i686-gcc-core
(only needed for hsdis-i386.dll
)
diffutils
(in Utils
category)
Run the Cygwin Terminal. This can be done using the Desktop or Start Menu icon created by the installer, and will create your Cygwin home directory (C:cygwinhome<username>
or C:cygwin64home<username>
by default).
- Download the latest GNU binutils source package and extract its contents to your Cygwin home directory. At the time of writing, the latest package is
binutils-2.25.tar.bz2
. This should result in a directory named binutils-2.25
(or whatever the latest version is) in your Cygwin home directory.
- Download the OpenJDK source by going to the JDK 8 Updates repository, selecting the tag corresponding to your installed JRE version, and clicking bz2. Extract the hsdis directory (found in
srcshareools
) to your Cygwin home directory.
- In the Cygwin Terminal, enter
cd ~/hsdis
.
To build hsdis-amd64.dll
, enter
make OS=Linux MINGW=x86_64-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.25
To build hsdis-i386.dll
, enter
make OS=Linux MINGW=i686-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.25
In either case, replace 2.25
with the binutils version you downloaded. OS=Linux
is necessary because, although Cygwin is a Linux-like environment, the hsdis makefile fails to recognize it as such.
- The build will fail with messages
./chew: No such file or directory
and gcc: command not found
. Edit <Cygwin home directory>hsdisuildLinux-amd64fdMakefile
in a text editor like Wordpad or Notepad++ to change SUBDIRS = doc po
(line 342, if using binutils 2.25) to SUBDIRS = po
. Re-run the previous command.
The DLL can now be installed by copying it from hsdisuildLinux-amd64
or hsdisuildLinux-i586
to your JRE's binserver
or binclient
directory. You can find all such directories on your system by searching for java.dll
.
Bonus tip: if you prefer Intel ASM syntax to AT&T, specify -XX:PrintAssemblyOptions=intel
alongside any other PrintAssembly options you use.
*page license is Creative Commons
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…