有时候我们会听到一些勇敢的人出于性能原因理解汇编语言并编写汇编语言,而不是使用高级语言的编译器。在JVM上也可以这样做吗?我已经审查了JVM指令集,它在某些方面类似于汇编语言,尽管它的级别更高(我假设JVM的系统特定实现非常高效)。
是否有可能,比如说,编写JVM指令并将它们放入java可执行二进制文件中?
是。你可以通过asm库来实现。
事实上,这就是人们在JVM之上实现非Java语言的典型方式,也是许多Java元编程库工作的方式。
您可能非常希望为相同类型的元编程功能这样做-例如,在运行时生成类,或使用InvokeDynamic指令生成您自己的方法调度规则。
使用原始Java字节码,而不是编写相应的高级Java,并不能获得很多性能上的好处(JIT是主要的性能助推器,它针对"普通"Java代码生成的各种模式进行了优化),但它确实为您提供了灵活性,可以处理在Java中难以表达、冗长或不可能表达的事情。