java - 有没有可能直接在jvm中实现java应用的一部分?

标签 java ijvm

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

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

最佳答案

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

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

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

为什么?

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

所以:

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

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

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

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


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

关于java - 有没有可能直接在jvm中实现java应用的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68022163/

相关文章:

java ant构建多个版本的软件

java - JTable 标题渲染器

java - ByteBuffer.asCharArray().array() 上的 UnsupportedOperationException

java - 如何从排序列表中获取第一个元素?

java - IJVM 练习,交换 4 个元素堆栈中的 2 个元素

IJVM IRETURN 等于 HALT 吗?因为两者都会停止解释器?

java - 我怎样才能在加载完成后只显示 webview fragment