有人可以提供反汇编的机器代码汇编程序列表吗?
我的意思是,与 C 中的普通函数调用相比,肯定有一些开销。
VM 需要跟踪调用以查找热点,并且当它使用编译代码时,如果新加载的类需要重新编译,它需要提供动态更改编译方法的方法。
我想某处也有返回堆栈溢出检查。
编辑:我想我应该提到,我不是一个java程序员,而是一个编译器编写者,并且想找出为什么java应用程序如此慢,而java微基准测试与本机编译代码相当。因此,查看一些细节对我来说很重要,即使它们只需要几十纳秒和一些额外的说明。
Java不会直接编译为机器代码,它会编译为字节码,然后在运行时解释或编译为机器代码——我不知道如何在运行时获取机器代码,我只是将其想象为如此巨大的质量移位、更改字节最终会快速可靠地执行该死的。
一个小的方法调用应该在运行时完全编译出来。如果可以解析或忽略足够的引用,即使是大型方法调用也可以由 VM 编写为内联机器代码。
使用 Final 可以提供很大帮助,因为它可以向虚拟机提供有关如何进一步优化的提示。
由于方法调用实际上可以完全编译出来,并且最多具有最小的成本 - 你真的不应该担心它。只要尽力编码,并在性能规范失败时担心性能问题(此时,局部优化比尝试消除代码中的方法调用、破坏每个相关人员的代码库要好得多)。
请注意,由于运行时分析,在某些非常罕见的情况下,它实际上可能比 C 中的类似代码更快(C 编译器不会在运行时分析并为您手动优化代码,您必须自己完成所有这些工作) 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)