- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
<分区>
我在 Mac OS X 上使用 Java 8 编译了一个简单的 Java 文件以进行汇编。这是 Test.java:
public class Test {
static volatile int a = 1;
public static void main(String[] args) {
a++;
}
}
我输出汇编代码使用:
java -server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:-Inline -XX:CompileCommand=print,*Test.main Test>Test.asm
这是 Test.asm 输出:
CompilerOracle: print *Test.main
Compiled method (c1) 1733 1750 3 Test::main (9 bytes)
total in heap [0x0000000111848650,0x0000000111848970] = 800
relocation [0x0000000111848778,0x00000001118487a0] = 40
main code [0x00000001118487a0,0x0000000111848860] = 192
stub code [0x0000000111848860,0x00000001118488f0] = 144
oops [0x00000001118488f0,0x00000001118488f8] = 8
metadata [0x00000001118488f8,0x0000000111848900] = 8
scopes data [0x0000000111848900,0x0000000111848918] = 24
scopes pcs [0x0000000111848918,0x0000000111848968] = 80
dependencies [0x0000000111848968,0x0000000111848970] = 8
Loaded disassembler from /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/hsdis-amd64.dylib
Decoding compiled method 0x0000000111848650:
Code:
[Disassembling for mach='i386:x86-64']
[Entry Point]
[Verified Entry Point]
[Constants]
# {method} {0x000000010e40e240} 'main' '([Ljava/lang/String;)V' in 'Test'
# parm0: rsi:rsi = '[Ljava/lang/String;'
# [sp+0x40] (sp of caller)
0x00000001118487a0: mov %eax,-0x14000(%rsp)
0x00000001118487a7: push %rbp
0x00000001118487a8: sub $0x30,%rsp
0x00000001118487ac: movabs $0x10e40e4d0,%rdi ; {metadata(method data for {method} {0x000000010e40e240} 'main' '([Ljava/lang/String;)V' in 'Test')}
0x00000001118487b6: mov 0xdc(%rdi),%ebx
0x00000001118487bc: add $0x8,%ebx
0x00000001118487bf: mov %ebx,0xdc(%rdi)
0x00000001118487c5: movabs $0x10e40e240,%rdi ; {metadata({method} {0x000000010e40e240} 'main' '([Ljava/lang/String;)V' in 'Test')}
0x00000001118487cf: and $0x0,%ebx
0x00000001118487d2: cmp $0x0,%ebx
0x00000001118487d5: je 0x00000001118487fe
0x00000001118487db: movabs $0x7955fd1e8,%rsi ; {oop(a 'java/lang/Class' = 'Test')}
0x00000001118487e5: mov 0x68(%rsi),%edi ;*getstatic a
; - Test::main@0 (line 6)
0x00000001118487e8: inc %edi
0x00000001118487ea: mov %edi,0x68(%rsi)
0x00000001118487ed: lock addl $0x0,(%rsp) ;*putstatic a
; - Test::main@5 (line 6)
0x00000001118487f2: add $0x30,%rsp
0x00000001118487f6: pop %rbp
0x00000001118487f7: test %eax,-0x5f7f6fd(%rip) # 0x000000010b8c9100
; {poll_return}
0x00000001118487fd: retq
0x00000001118487fe: mov %rdi,0x8(%rsp)
0x0000000111848803: movq $0xffffffffffffffff,(%rsp)
0x000000011184880b: callq 0x0000000111543f60 ; OopMap{rsi=Oop off=112}
;*synchronization entry
; - Test::main@-1 (line 6)
; {runtime_call}
0x0000000111848810: jmp 0x00000001118487db
0x0000000111848812: nop
0x0000000111848813: nop
0x0000000111848814: mov 0x2a8(%r15),%rax
0x000000011184881b: movabs $0x0,%r10
0x0000000111848825: mov %r10,0x2a8(%r15)
0x000000011184882c: movabs $0x0,%r10
0x0000000111848836: mov %r10,0x2b0(%r15)
0x000000011184883d: add $0x30,%rsp
0x0000000111848841: pop %rbp
0x0000000111848842: jmpq 0x00000001114b24a0 ; {runtime_call}
0x0000000111848847: hlt
0x0000000111848848: hlt
0x0000000111848849: hlt
0x000000011184884a: hlt
0x000000011184884b: hlt
0x000000011184884c: hlt
0x000000011184884d: hlt
0x000000011184884e: hlt
0x000000011184884f: hlt
0x0000000111848850: hlt
0x0000000111848851: hlt
0x0000000111848852: hlt
0x0000000111848853: hlt
0x0000000111848854: hlt
0x0000000111848855: hlt
0x0000000111848856: hlt
0x0000000111848857: hlt
0x0000000111848858: hlt
0x0000000111848859: hlt
0x000000011184885a: hlt
0x000000011184885b: hlt
0x000000011184885c: hlt
0x000000011184885d: hlt
0x000000011184885e: hlt
0x000000011184885f: hlt
[Exception Handler]
[Stub Code]
0x0000000111848860: callq 0x00000001115418e0 ; {no_reloc}
0x0000000111848865: mov %rsp,-0x28(%rsp)
0x000000011184886a: sub $0x80,%rsp
0x0000000111848871: mov %rax,0x78(%rsp)
0x0000000111848876: mov %rcx,0x70(%rsp)
0x000000011184887b: mov %rdx,0x68(%rsp)
0x0000000111848880: mov %rbx,0x60(%rsp)
0x0000000111848885: mov %rbp,0x50(%rsp)
0x000000011184888a: mov %rsi,0x48(%rsp)
0x000000011184888f: mov %rdi,0x40(%rsp)
0x0000000111848894: mov %r8,0x38(%rsp)
0x0000000111848899: mov %r9,0x30(%rsp)
0x000000011184889e: mov %r10,0x28(%rsp)
0x00000001118488a3: mov %r11,0x20(%rsp)
0x00000001118488a8: mov %r12,0x18(%rsp)
0x00000001118488ad: mov %r13,0x10(%rsp)
0x00000001118488b2: mov %r14,0x8(%rsp)
0x00000001118488b7: mov %r15,(%rsp)
0x00000001118488bb: movabs $0x10c7d8060,%rdi ; {external_word}
0x00000001118488c5: movabs $0x111848865,%rsi ; {internal_word}
0x00000001118488cf: mov %rsp,%rdx
0x00000001118488d2: and $0xfffffffffffffff0,%rsp
0x00000001118488d6: callq 0x000000010c60361a ; {runtime_call}
0x00000001118488db: hlt
[Deopt Handler Code]
0x00000001118488dc: movabs $0x1118488dc,%r10 ; {section_word}
0x00000001118488e6: push %r10
0x00000001118488e8: jmpq 0x000000011148d3c0 ; {runtime_call}
0x00000001118488ed: hlt
0x00000001118488ee: hlt
0x00000001118488ef: hlt
OopMapSet contains 1 OopMaps
#0
OopMap{rsi=Oop off=112}
Compiled method (c1) 1747 1751 1 Test::main (9 bytes)
total in heap [0x0000000111847250,0x0000000111847518] = 712
relocation [0x0000000111847378,0x00000001118473a0] = 40
main code [0x00000001118473a0,0x0000000111847420] = 128
stub code [0x0000000111847420,0x00000001118474b0] = 144
oops [0x00000001118474b0,0x00000001118474b8] = 8
metadata [0x00000001118474b8,0x00000001118474c0] = 8
scopes data [0x00000001118474c0,0x00000001118474d0] = 16
scopes pcs [0x00000001118474d0,0x0000000111847510] = 64
dependencies [0x0000000111847510,0x0000000111847518] = 8
Decoding compiled method 0x0000000111847250:
Code:
[Entry Point]
[Verified Entry Point]
[Constants]
# {method} {0x000000010e40e240} 'main' '([Ljava/lang/String;)V' in 'Test'
# parm0: rsi:rsi = '[Ljava/lang/String;'
# [sp+0x40] (sp of caller)
0x00000001118473a0: mov %eax,-0x14000(%rsp)
0x00000001118473a7: push %rbp
0x00000001118473a8: sub $0x30,%rsp
0x00000001118473ac: movabs $0x7955fd1e8,%rsi ; {oop(a 'java/lang/Class' = 'Test')}
0x00000001118473b6: mov 0x68(%rsi),%edi ;*getstatic a
; - Test::main@0 (line 6)
0x00000001118473b9: inc %edi
0x00000001118473bb: mov %edi,0x68(%rsi)
0x00000001118473be: lock addl $0x0,(%rsp) ;*putstatic a
; - Test::main@5 (line 6)
0x00000001118473c3: add $0x30,%rsp
0x00000001118473c7: pop %rbp
0x00000001118473c8: test %eax,-0x5f7e2ce(%rip) # 0x000000010b8c9100
; {poll_return}
0x00000001118473ce: retq
0x00000001118473cf: nop
0x00000001118473d0: nop
0x00000001118473d1: mov 0x2a8(%r15),%rax
0x00000001118473d8: movabs $0x0,%r10
0x00000001118473e2: mov %r10,0x2a8(%r15)
0x00000001118473e9: movabs $0x0,%r10
0x00000001118473f3: mov %r10,0x2b0(%r15)
0x00000001118473fa: add $0x30,%rsp
0x00000001118473fe: pop %rbp
0x00000001118473ff: jmpq 0x00000001114b24a0 ; {runtime_call}
0x0000000111847404: hlt
0x0000000111847405: hlt
0x0000000111847406: hlt
0x0000000111847407: hlt
0x0000000111847408: hlt
0x0000000111847409: hlt
0x000000011184740a: hlt
0x000000011184740b: hlt
0x000000011184740c: hlt
0x000000011184740d: hlt
0x000000011184740e: hlt
0x000000011184740f: hlt
0x0000000111847410: hlt
0x0000000111847411: hlt
0x0000000111847412: hlt
0x0000000111847413: hlt
0x0000000111847414: hlt
0x0000000111847415: hlt
0x0000000111847416: hlt
0x0000000111847417: hlt
0x0000000111847418: hlt
0x0000000111847419: hlt
0x000000011184741a: hlt
0x000000011184741b: hlt
0x000000011184741c: hlt
0x000000011184741d: hlt
0x000000011184741e: hlt
0x000000011184741f: hlt
[Exception Handler]
[Stub Code]
0x0000000111847420: callq 0x00000001115418e0 ; {no_reloc}
0x0000000111847425: mov %rsp,-0x28(%rsp)
0x000000011184742a: sub $0x80,%rsp
0x0000000111847431: mov %rax,0x78(%rsp)
0x0000000111847436: mov %rcx,0x70(%rsp)
0x000000011184743b: mov %rdx,0x68(%rsp)
0x0000000111847440: mov %rbx,0x60(%rsp)
0x0000000111847445: mov %rbp,0x50(%rsp)
0x000000011184744a: mov %rsi,0x48(%rsp)
0x000000011184744f: mov %rdi,0x40(%rsp)
0x0000000111847454: mov %r8,0x38(%rsp)
0x0000000111847459: mov %r9,0x30(%rsp)
0x000000011184745e: mov %r10,0x28(%rsp)
0x0000000111847463: mov %r11,0x20(%rsp)
0x0000000111847468: mov %r12,0x18(%rsp)
0x000000011184746d: mov %r13,0x10(%rsp)
0x0000000111847472: mov %r14,0x8(%rsp)
0x0000000111847477: mov %r15,(%rsp)
0x000000011184747b: movabs $0x10c7d8060,%rdi ; {external_word}
0x0000000111847485: movabs $0x111847425,%rsi ; {internal_word}
0x000000011184748f: mov %rsp,%rdx
0x0000000111847492: and $0xfffffffffffffff0,%rsp
0x0000000111847496: callq 0x000000010c60361a ; {runtime_call}
0x000000011184749b: hlt
[Deopt Handler Code]
0x000000011184749c: movabs $0x11184749c,%r10 ; {section_word}
0x00000001118474a6: push %r10
0x00000001118474a8: jmpq 0x000000011148d3c0 ; {runtime_call}
0x00000001118474ad: hlt
0x00000001118474ae: hlt
0x00000001118474af: hlt
OopMapSet contains 0 OopMaps
问题是:为什么生成的汇编代码有两个主要方法,如何让它只有一个?
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!