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

2024-04-24

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


一般用法

正如其他答案所解释的,您可以使用以下 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

  1. 安装 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类别)
  2. 运行 Cygwin 终端。这可以使用安装程序创建的桌面或开始菜单图标来完成,并将创建您的 Cygwin 主目录(C:\cygwin\home\<username>\ or C:\cygwin64\home\<username>\默认情况下)。

  3. 下载最新的GNU binutils源码包 http://ftpmirror.gnu.org/binutils/并将其内容提取到您的 Cygwin 主目录。在撰写本文时,最新的软件包是binutils-2.25.tar.bz2。这应该会产生一个名为binutils-2.25(或任何最新版本)在您的 Cygwin 主目录中。
  4. 下载 OpenJDK 源代码转到 JDK 8 更新存储库 http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/tags,选择与您安装的JRE版本对应的标签,然后单击bz2。解压 hsdis 目录(位于src\share\tools) 到您的 Cygwin 主目录。
  5. 在 Cygwin 终端中,输入cd ~/hsdis.
  6. 建造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 无法识别它。

  7. 构建将失败并显示消息./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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查看JVM中JIT编译的代码? 的相关文章

随机推荐

  • 更好的 boost asio Deadline_timer 示例

    我正在寻找一个更好的例子boost asio deadline timer 给出的例子总是会超时并调用close方法 我尝试打电话cancel 在计时器上但这会导致函数传递到async wait立即被呼叫 在异步 tcp 客户端中使用计时器
  • 使用 Ant 遍历目录

    假设我有一个包含以下路径的 PDF 文件集合 some path pdfs birds duck pdf some path pdfs birds goose pdf some path pdfs insects fly pdf some
  • 异步 REST API 生成警告

    我正在使用 Spring boot 应用程序 我有一个返回 Callable 的休息控制器 GetMapping fb roles Timed public Callable
  • 在 UIView 子类中调用drawRect

    我已经对 UIView 进行了子类化 并且实现了一个 drawRect 我基本上希望在设置 CGPoint 这是此 UIView 的一个属性 之后调用此 drawRect 我该怎么做呢 这是我的代码 id initWithCoder NSC
  • 根据请求创建 Hibernate-Session

    我刚刚启动了一个简单的 Java 测试项目 它使用 Hibernate 管理一些实体 并提供 REST 接口来操作这些对象并提供一些额外的业务逻辑 REST 接口是使用 RESTEasy 和 Jetty 创建的 到目前为止 一切工作正常 但
  • 如何在不循环的情况下找到小于一个数的最大二的幂? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何在不循
  • Python Sci-Kit 学习:多标签分类 ValueError:无法将字符串转换为浮点数:

    我正在尝试使用 scikit learn 0 17 进行多标签分类 我的数据看起来像 training Col1 Col2 asd dfgfg 1 2 3 poioi oiopiop 4 test Col1 asdas gwergwger
  • Android 版 Eclipse 中的“调试为...”

    我是一名 Android 菜鸟 正在 Eclipse Galileo 3 52 环境中自学调试 我有一个小的 hello world 应用程序 可以在模拟器中正常运行 所以现在我想通过设置断点 查看变量等来练习调试 但是 运行 gt 调试为
  • MATLAB:让audioplayer()在函数结束后继续播放

    我正在使用使用以下子函数的代码 function playTone duration toneFreq Generate a tone samplesPerSecond 44100 the bit rate of the tone y si
  • 未安装分发证书/私钥

    使用 Xcode 9 1 构建 iOS 应用程序后 我想将其存档并将其上传到 appStore 进行 beta 测试 但点击按钮后出现以下问题Upload to the App Store 并选择Automatically manage s
  • 在 mvc3 中公开实体或 DTO 以查看的最佳实践是什么?

    我创建了自己定制的大量架构 包括针对不同技术的 n 层 目前正在使用 asp net mvc 框架进行 n 层架构 问题是我在数据访问层有实体框架 由于实体将拥有所有关系元数据和导航属性 因此它变得更重 我觉得直接通过 mvc 视图公开这些
  • 在俄罗斯方块项目中添加其他形状。循环逻辑辅助

    我正在创建一个俄罗斯方块克隆作为个人项目 以帮助我更好地绘制图像 移动图像以及学习碰撞检测 一切都很顺利 但我对让程序在第一个停止移动时向框架添加新的方块形状背后的逻辑感到困惑 到目前为止 我使用随机数生成器随机创建四边形 并将其添加到框架
  • Owin Context 每个请求使用单个实例

    app CreatePerOwinContext DataContext Create 我有上面的行来创建一个数据上下文 当我启动一个新的 MVC 5 项目时 该代码随项目一起提供 同时 我使用 autofac 在我的依赖注册器中为每个请求
  • Dia:图表编辑器:盒子对象的限制?

    如标题所示 我尝试为 hte 3d 图形引擎 ogre3d 开发尽可能少的方案 问题是大图方案 Ogre Root 类需要相当多的从它下降的箭头 用关系箭头连接框的模型是它们只能通过边界周围的特定点 称为 关节 或其他东西 进入 退出 但现
  • 使用像 FILE* 这样的 C 字符串

    我有一个 C 函数 可以从 a 中读取字符流FILE 我怎样才能创建一个FILE 在这种情况下从字符串中 Edit 我认为我原来的帖子可能具有误导性 我想创建一个FILE 来自文字字符串值 因此结果FILE 会表现得好像某处确实有一个包含该
  • 可以在 JavaScript 中强制打印机设置(纸张尺寸)吗?

    我需要将网络应用程序中的页面打印到 8 x 4 索引卡上 IE 不会将打印设置从一份打印保存到下一份打印 那么有没有办法以编程方式强制打印设置 看看这个 CSS3 示例http www w3 org TR css3 page size ht
  • java.lang.IllegalArgumentException:找不到 id 0x7f0c007b 的视图

    我尝试启动一个应用程序项目 现在出现以下错误 我从旁边找到的答案中尝试了很多 但没有发现我的错误 这是输出 E AndroidRuntime FATAL EXCEPTION main Process de christian heinisc
  • Meteor.WrapAsync 不返回值

    我一直在努力工作Meteor WrapAsync我读过了Meteor wrapAsync 语法 https stackoverflow com questions 26058205 meteor wrapasync syntax回答这个视频
  • 如何保护自己免受内存消耗失控导致电脑崩溃的情况?

    我时不时地发现自己做了一些相当愚蠢的事情 导致我的程序分配它可以获得的所有内存 然后分配一些内存 过去 这种情况会导致程序因 内存不足 错误而很快死掉 但现在 Windows 会不遗余力地将这些不存在的内存提供给应用程序 而且实际上显然已经
  • 如何查看JVM中JIT编译的代码?

    有什么方法可以查看 JVM 中 JIT 生成的本机代码吗 一般用法 正如其他答案所解释的 您可以使用以下 JVM 选项运行 XX UnlockDiagnosticVMOptions XX PrintAssembly 根据特定方法进行过滤 您