gpt4 book ai didi

java - 如何在 JVM 中查看 JIT 编译的代码?

转载 作者:IT老高 更新时间:2023-10-28 11:51:52 26 4
gpt4 key购买 nike

有什么方法可以查看 JIT 在 JVM 中生成的 native 代码吗?

最佳答案

一般用法

正如其他答案所解释的,您可以使用以下 JVM 选项运行:

-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly

过滤特定方法

您还可以使用以下语法过滤特定方法:

-XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=print,*MyClass.myMethod

注意事项:

  • 您可能需要将第二个参数放在引号内,具体取决于操作系统等。
  • 如果方法被内联,您可能会错过一些优化

如何:在 Windows 上安装所需的库

如果您运行的是 Windows,this page有关于如何构建和安装的说明hsdis-amd64.dllhsdis-i386.dll这是使其工作所必需的。我们在下面复制并扩展该页面*的内容以供引用:


从何处获取预构建的二进制文件

您可以从 fcml 下载适用于 Windows 的预构建二进制文件。项目

如何构建 hsdis-amd64.dllhsdis-i386.dll在 Windows 上

此版本的指南是在 64 位 Windows 8.1 上使用 64 位 Cygwin 并生成 hsdis-amd64.dll 编写的

  1. Install Cygwin .在 Select Packages屏幕,添加以下包(通过展开 Devel 类别,然后单击每个包名称旁边的 Skip 标签):

    • make
    • mingw64-x86_64-gcc-core (仅 hsdis-amd64.dll 需要)
    • mingw64-i686-gcc-core (仅 hsdis-i386.dll 需要)
    • diffutils (在 Utils 类别中)
  2. 运行 Cygwin 终端。这可以使用安装程序创建的桌面或开始菜单图标来完成,并将创建您的 Cygwin 主目录(默认为 C:\cygwin\home\<username>\C:\cygwin64\home\<username>\)。

  3. Download the latest GNU binutils source package并将其内容提取到您的 Cygwin 主目录。在撰写本文时,最新的软件包是 binutils-2.25.tar.bz2 .这应该会产生一个名为 binutils-2.25 的目录。 (或任何最新版本)在 Cygwin 主目录中。
  4. 通过 going to the JDK 8 Updates repository 下载 OpenJDK 源代码,选择与您安装的 JRE 版本相对应的标签,然后单击 bz2。将 hsdis 目录(位于 src\share\tools 中)解压缩到 Cygwin 主目录。
  5. 在 Cygwin 终端中,输入 cd ~/hsdis .
  6. 构建 hsdis-amd64.dll , 输入

    make OS=Linux MINGW=x86_64-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.25

    构建 hsdis-i386.dll , 输入

    make OS=Linux MINGW=i686-w64-mingw32 'AR=$(MINGW)-ar' BINUTILS=~/binutils-2.25

    在任何一种情况下,替换 2.25使用您下载的 binutils 版本。 OS=Linux是必要的,因为虽然 Cygwin 是一个类似 Linux 的环境,但 hsdis makefile 无法识别它。

  7. 构建将失败并显示消息 ./chew: No such file or directorygcc: command not found .编辑 <Cygwin home directory>\hsdis\build\Linux-amd64\bfd\Makefile在 Wordpad 或 Notepad++ 等文本编辑器中更改 SUBDIRS = doc po (第 342 行,如果使用 binutils 2.25)到 SUBDIRS = po .重新运行之前的命令。

现在可以通过从 hsdis\build\Linux-amd64 复制来安装 DLL。或 hsdis\build\Linux-i586到您的 JRE 的 bin\serverbin\client目录。您可以通过搜索 java.dll 在系统上找到所有此类目录。 .

额外提示:如果您更喜欢 Intel ASM 语法而不是 AT&T,请指定 -XX:PrintAssemblyOptions=intel与您使用的任何其他 PrintAssembly 选项一起使用。

*页面许可为知识共享

关于java - 如何在 JVM 中查看 JIT 编译的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1503479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com