【java】如何在IDEA 中查看 Class文件的汇编

397 篇文章 482 订阅 ¥19.90 ¥99.00

在这里插入图片描述

1.概述

转载:面经手册 · 第14篇《volatile 怎么实现的内存可见?没有 volatile 一定不可见吗?》

通过Class文件查看汇编,需要下载 hsdis-amd64.dll 文件,复制到 JAVA_HOME\jre\bin\server目录下。下载资源如下:

http://vorboss.dl.sourceforge.net/project/fcml/fcml-1.1.1/hsdis-1.1.1-win32-amd64.zip(opens new window)

http://vorboss.dl.sourceforge.net/project/fcml/fcml-1.1.1/hsdis-1.1.1-win32-i386.zip

另外是执行命令,包括:

基础指令:java -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
指定打印:-XX:CompileCommand=dontinline,类名.方法名
指定打印:-XX:CompileCommand=compileonly,类名.方法名
输出位置:> xxx

最终使用:java -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:CompileCommand=dontinline,ApiTest.main -XX:CompileCommand=compileonly,ApiTest.mian

指令可以在IDEA中的 Terminal 里使用,也可以到 DOS黑窗口中使用

另外,为了更简单的使用,我们把指令可以配置到idea的 VM options 里,如下图:

在这里插入图片描述
配置完成后,不出意外的运行结果如下:


Loaded disassembler from C:\Program Files\Java\jdk1.8.0_161\jre\bin\server\hsdis-amd64.dll
Decoding compiled method 0x0000000003744990:
Code:
Argument 0 is unknown.RIP: 0x3744ae0 Code size: 0x00000110
[Disassembling for mach='amd64']
[Entry Point]
[Constants]
  # {method} {0x000000001c853d18} 'getSnapshotTransformerList' '()[Lsun/instrument/TransformerManager$TransformerInfo;' in 'sun/instrument/TransformerManager'
  #           [sp+0x40]  (sp of caller)
  0x0000000003744ae0: mov     r10d,dword ptr [rdx+8h]
  0x0000000003744ae4: shl     r10,3h
  0x0000000003744ae8: cmp     r10,rax
  0x0000000003744aeb: jne     3685f60h          ;   {runtime_call}
  0x0000000003744af1: nop     word ptr [rax+rax+0h]
  0x0000000003744afc: nop
[Verified Entry Point]
  0x0000000003744b00: mov     dword ptr [rsp+0ffffffffffffa000h],eax
  0x0000000003744b07: push    rbp
  0x0000000003744b08: sub     rsp,30h           ;*aload_0
                                                ; - sun.instrument.TransformerManager::getSnapshotTransformerList@0 (line 166)

  0x0000000003744b0c: mov     eax,dword ptr [rdx+10h]
  0x0000000003744b0f: shl     rax,3h            ;*getfield mTransformerList
                                                ; - sun.instrument.TransformerManager::getSnapshotTransformerList@1 (line 166)

  0x0000000003744b13: add     rsp,30h
...
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Idea 是一款 Java 开发环境,可以用来编写 Java 应用程序。在 Idea 创建一个 Java class 文件的步骤如下: 1. 打开 Idea,创建一个新的 Java 项目。 2. 在项目创建一个新的 Java class 文件。可以通过在项目结构视图右键单击 src 目录并选择“New” > “Java Class”,或者通过使用“File” > “New” > “Java Class” 菜单项来创建。 3. 在弹出的对话框输入 class 的名称,并选择要放置 class 文件的包名。 4. 单击“OK”以创建 class 文件。 5. 在编辑器输入 class 的代码。 注意事项: - 在编写 class 代码时,请确保使用正确的 Java 语法。 - 在编写 class 代码时,请遵循 Java 命名约定和最佳实践。 - 如果您在 class 使用其他类或库,请确保已将它们正确添加到项目依赖项。 ### 回答2: 在运行ideaclass文件之前,我们需要先确保已经创建了一个Java项目,并且已经成功编译生成了class文件。 具体操作步骤如下: 1. 打开Idea,点击顶部菜单栏的"File",然后选择"Open",在弹出的对话框选择你的Java项目所在的文件夹,点击"Open"按钮。 2. 在左侧的项目面板,找到你的Java文件(.java文件)所在的包,并展开。 3. 右键单击你想要运行的class文件,然后从弹出菜单选择"Run"选项。 4. Idea会自动构建并执行你选择的class文件。 另外,你也可以使用快捷键Shift + F10来运行选class文件。 在运行class文件之前,确保你的Java开发环境已经正确安装并配置好。如果你的项目依赖于外部库或框架,也需要先将它们正确地导入到项目。 运行class文件时,Idea将创建一个虚拟机实例,并将选定的class文件加载到虚拟机进行执行。你可以在Idea的控制台查看程序的输出结果和运行日志,以及可能出现的错误信息。 总结起来,通过以上步骤,你就可以在Idea成功运行class文件了。 ### 回答3: 要运行一个ideaclass文件,你需要遵循以下步骤: 1. 在idea打开你的项目。 2. 找到你的class文件所在的目录。通常在“src”文件夹下的相应包。 3. 右键单击该class文件,选择“运行”选项。 4. idea将使用Java虚拟机(JVM)运行该class文件。 5. 如果有参数或输入需求,你可以在下拉菜单选择“Edit Configurations”并提供所需的参数或输入。 6. 点击运行按钮(绿色的三角形),idea将启动JVM并运行你的class文件。 7. 如果一切正常,你将在idea的控制台看到程序的输出或结果。 需要注意的是,为了能够成功运行class文件,你的项目必须已经成功构建,并且class文件必须包含正确的java代码并且没有错误。此外,还需要确保你的项目的依赖项已经正确配置和引入。 希望以上步骤能够帮助你在idea成功运行class文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值