JVM 和 LLVM 为什么没有硬件实现?

关注者
109
被浏览
7461
又是问“为什么”之前没弄清楚“是不是”的嗯。

JVM有硬件实现。picoJava系列是个典型例子。ARM的Jazelle也允许JVM部分用硬件实现。它们都在硬件层面实现了JVM指令集(其中部分复杂指令用微指令或者调用软件处理来实现)。

不过这些技术原本更多是考虑在嵌入式领域用的。它们的实际性能普遍不高:可能比用C写个简单的解释器跑在通用CPU上快,但比不上用优化的JIT编译器实现的JVM跑在通用CPU上的性能。

像服务器端高性能的Java解决方案的话,定制CPU多半不会直接实现JVM指令集,而是在一套通用指令集(例如说经典的RISC指令集)的基础上提供一些能支持高性能JVM的特殊指令。Azul Systems的Vega系列CPU就是这样的设计。
特殊指令会包括像是硬件实现的inline cache call、read barrier、带mask的各种指令之类的。

还有算不上是硬件JVM,不过更有趣的是直接把Java编译到硬件。例如IBM做过的一个研究是把“兼容Java的语言”编译为FPGA。该项目名为Lime。为此它们还研发了用FPGA实现的GC,相当彻底。

---------

LLVM我倒确实是不知道有没有硬件实现。技术上最特别的地方大概在于LLVM IR是SSA形式的,带有Phi节点,而用硬件来实现Phi节点的语义有点…非传统。或许以后我们也不会见到实现LLVM IR的硬件,但是说不定能见到让SSA形式执行得更高效的硬件指令集出现(例如说像某论文说的那样提供register name permutation的指令之类的)。