是否可以直接在 jvm 中实现 java 应用程序的一部分?

Is it possible to implement a part of a java application directly in jvm?

我在大学里学过 ijvm(jvm 的一个子集),它提出了一个问题:是否可以直接在 jvm 中实现 java 应用程序的一部分以提高性能? ... 就像您可以在汇编中实现 C 程序的一部分一样。

如果可能的话,我将不胜感激展示它的代码片段。

Is it possible to implement a part of a java application directly in jvm?

我猜你的意思是用 JVM 字节码编程。

是的,这是可能的。但是,您不太可能通过这样做获得重大改进。

为什么?

因为现代 JVM1 实际上将字节码编译为本机代码,而字节码到本机代码的编译器通常会进行一些相当严格的优化。

所以:

  • 您关于编写更好(更快)字节码的任何见解都可能是错误的。

  • 通过优化字节码,您实际上可能会干扰字节码对本机代码编译器的优化能力。

此外,JVM 字节码需要遵循一些相当严格的规则,这些规则旨在避免运行时类型错误。如果您手写的字节码违反了这些规则,它们将(应该!)在 class 加载时被验证者拒绝。

但如果你想尝试,有编写字节码汇编语言的工具;参见 What JVM assemblers are there?


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