能否直接在JVM中实现Java应用程序的一部分?

3
我在大学里学习了ijvm(jvm的一个子集),这引发了一个问题:是否可能直接在jvm中实现Java应用程序的一部分以提高性能?就像你可以用汇编语言实现C程序的一部分一样。
如果可能的话,我将非常感激您提供展示它的代码片段。

1
如果你认为你可以比编译器更聪明,当然可以(不确定提到的项目是否仍在积极开发中,我的意思是,如果你的动机是“性能”,那么这可能不是正确的方式)。 - Federico klez Culloca
@FedericoklezCulloca 但是假设,你是说这种方式可以改善性能吗?(无论这种性能改善多么微小) - Sebastian Nielsen
一切皆有可能,你可以自己编译JVM,OpenJDK是开源的。然后你可以添加或删除任何你想要的东西。同时,记得阅读关于JNI和JNA的内容。 - tevemadar
@SebastianNielsen 我的意思是,我(几乎)确定编译器始终会生成更高效的代码(当然我不能“证明”这一点)。如果你真的想要性能提升,并且认为自己可以比编译器做得更好,那么请用C语言编写性能密集型部分,或者为了获得更大的收益,请使用本机机器语言并通过JNI链接到它们。 - Federico klez Culloca
1
“在 JVM 中直接实现”这个说法毫无意义。JVM 不是一种编程语言。 - Holger
1个回答

6
有可能直接在JVM中实现Java应用程序的一部分吗?
我认为你是指使用JVM字节码进行编程。
是的,这是可能的。但是,通过这种方式获得显着的改进的可能性很小。
为什么?
因为现代JVM实际上将字节码编译为本机代码,并且字节码到本机代码编译器通常会进行一些相当严格的优化。
所以:
任何你对编写更好(更快)字节码的见解可能都是错误的。
通过优化字节码,你可能会干扰字节码到本机代码编译器的优化能力。
此外,JVM字节码需要遵循一些相当严格的规则,旨在避免运行时类型错误。如果你手写的字节码违反了这些规则,它们将(应该!)在类加载时被验证器拒绝。
但是如果你想尝试,有一些工具可以编写字节码汇编语言,请参见 有哪些JVM汇编器?

1 - JIT编译首次在主流(Sun)Java中在JDK 1.2中得到支持。在此之前,JVM仅解释字节码,并手工编码字节码更可能产生差异。但在那些日子里,获得更好的性能的方法是用C编写Java应用程序的性能关键部分,并通过JNI调用C。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接