一般用法
正如其他答案所解释的,您可以使用以下 JVM 选项运行:
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
根据特定方法进行过滤
您还可以使用以下语法过滤特定方法:
-XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=print,*MyClass.myMethod
Notes:
- 您可能需要将第二个参数放在引号内,具体取决于操作系统等。
- 如果该方法被内联,您可能会错过一些优化
如何:在 Windows 上安装所需的库
如果您运行的是 Windows,这一页 http://dropzone.nfshost.com/hsdis.htm有关于如何构建和安装的说明hsdis-amd64.dll
and hsdis-i386.dll
使其发挥作用所需的条件。我们复制并扩展该页面*的内容以供参考:
从哪里获取预构建的二进制文件
您可以从以下位置下载适用于 Windows 的预构建二进制文件fcml http://fcml-lib.com/ project
- hsdis-amd64.dll http://vorboss.dl.sourceforge.net/project/fcml/fcml-1.1.1/hsdis-1.1.1-win32-amd64.zip
- hsdis-i386.dll http://vorboss.dl.sourceforge.net/project/fcml/fcml-1.1.1/hsdis-1.1.1-win32-i386.zip
如何建造hsdis-amd64.dll
and hsdis-i386.dll
在 Windows 上
此版本的指南是在 Windows 8.1 64 位上使用 64 位 Cygwin 编写的并生成 hsdis-amd64.dll
-
安装 Cygwin http://cygwin.com/install.html。在Select Packages
屏幕上,添加以下包(通过展开Devel
类别,然后单击一次Skip
每个包名称旁边的标签):
make
-
mingw64-x86_64-gcc-core
(仅需要hsdis-amd64.dll
)
-
mingw64-i686-gcc-core
(仅需要hsdis-i386.dll
)
-
diffutils
(in Utils
类别)
运行 Cygwin 终端。这可以使用安装程序创建的桌面或开始菜单图标来完成,并将创建您的 Cygwin 主目录(C:\cygwin\home\<username>\
or C:\cygwin64\home\<username>\
默认情况下)。
-
下载最新的GNU binutils源码包 http://ftpmirror.gnu.org/binutils/并将其内容提取到您的 Cygwin 主目录。在撰写本文时,最新的软件包是
binutils-2.25.tar.bz2
。这应该会产生一个名为binutils-2.25
(或任何最新版本)在您的 Cygwin 主目录中。
- 下载 OpenJDK 源代码转到 JDK 8 更新存储库 http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/tags,选择与您安装的JRE版本对应的标签,然后单击bz2。解压 hsdis 目录(位于
src\share\tools
) 到您的 Cygwin 主目录。
- 在 Cygwin 终端中,输入
cd ~/hsdis
.
-
建造hsdis-amd64.dll
, enter
make OS=Linux MINGW=x86_64-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.25
建造hsdis-i386.dll
, enter
make OS=Linux MINGW=i686-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.25
无论哪种情况,请更换2.25
使用您下载的 binutils 版本。OS=Linux
这是必要的,因为虽然 Cygwin 是一个类似 Linux 的环境,但 hsdis makefile 无法识别它。
- 构建将失败并显示消息
./chew: No such file or directory
and gcc: command not found
. Edit <Cygwin home directory>\hsdis\build\Linux-amd64\bfd\Makefile
在 Wordpad 或 Notepad++ 等文本编辑器中进行更改SUBDIRS = doc po
(第 342 行,如果使用 binutils 2.25)SUBDIRS = po
。重新运行之前的命令。
现在可以通过从以下位置复制 DLL 来安装hsdis\build\Linux-amd64
or hsdis\build\Linux-i586
到你的 JREbin\server
or bin\client
目录。您可以通过搜索来找到系统上的所有此类目录java.dll
.
额外提示:如果您更喜欢 Intel ASM 语法而不是 AT&T,请指定-XX:PrintAssemblyOptions=intel
与您使用的任何其他 PrintAssembly 选项一起。
*page license is Creative Commons