第一步:下载hsdis
第二步:将hsdis-amd64.dll存放到..\jdk1.8.0_171\jre\bin\server目录下
将hsdis-amd65.dll和hsdis-i386.dll存放到\jre1.8.0_171\bin\server目录下
第三步:打开IDEA,run>>Edit Configurations
第四步:在VM options里输入下面的指令
-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+PrintCompilation
第五步: 运行程序。下面只贴出了部分代码。
164 1 4 java.lang.String::hashCode (55 bytes)
Loaded disassembler from C:\Program Files\Java\jdk1.8.0_171\jre\bin\server\hsdis-amd64.dll
Decoding compiled method 0x00000000038c07d0:
Code:
[Disassembling for mach='i386:x86-64']
[Entry Point]
[Constants]
# {method} {0x000000001c5e4fc0} 'hashCode' '()I' in 'java/lang/String'
# [sp+0x30] (sp of caller)
0x00000000038c0900: mov 0x8(%rdx),%r10d
0x00000000038c0904: shl $0x3,%r10
0x00000000038c0908: cmp %r10,%rax
0x00000000038c090b: jne 0x0000000003895f60 ; {runtime_call}
0x00000000038c0911: data16 xchg %ax,%ax
0x00000000038c0914: nopl 0x0(%rax,%rax,1)
0x00000000038c091c: data16 data16 xchg %ax,%ax
[Verified Entry Point]
0x00000000038c0920: mov %eax,-0x6000(%rsp)
0x00000000038c0927: push %rbp
0x00000000038c0928: sub $0x20,%rsp ;*synchronization entry
; - java.lang.String::hashCode@-1 (line 1466)
0x00000000038c092c: mov %rdx,%rbx
0x00000000038c092f: mov 0x10(%rdx),%eax ;*getfield hash
; - java.lang.String::hashCode@1 (line 1466)
0x00000000038c0932: test %eax,%eax
0x00000000038c0934: jne 0x00000000038c0a25 ;*ifne
; - java.lang.String::hashCode@6 (line 1467)
这样就能看到java文件编译后的汇编代码。