为什么HotSpot需要注册分配?

kar*_*aut 0 java llvm jvm-hotspot

这是我读过的有关JVM的内容.HotSpot基于堆栈,Dalvik是基于寄存器的.如果HotSpot是基于堆栈的,那么一旦我们将代码重新表示为块,为什么我们需要完成寄存器分配?

另外,llvm在哪里适合这个?我读到我们可以使用llvm核心和后端来获取java源代码.HotSpot是否使用LLVM?

Mar*_*nik 5

HotSpot不是基于堆栈的,标准的java 字节码是.HotSpot是一个优化运行时,允许使用任何可以想象的技巧来快速执行实现JVM规范定义的基于堆栈的机器的操作语义的代码.由于所有相关的CPU架构都是面向寄存器的,因此HotSpot自然会利用它并使用寄存器分配.

HotSpot不使用llvm,它是一个独立的开发.据我所知,有一个名为J3的基于llvm的JVM实现,与HotSpot无关.

  • 具体来说,该文章将*implementation*与*specification*混淆.Java标准*指定*基于堆栈的虚拟机,它不实现*它.同样,Android运行时指定基于寄存器的虚拟机,dalvik是实现它的运行时.基于堆栈的虚拟机的实现本身不需要基于堆栈 - 而事实是,事实并非如此. (3认同)