有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java热点为什么需要寄存器分配?

下面是我读到的关于JVM的内容。HotSpot是基于堆栈的,Dalvik是基于寄存器的。若HotSpot是基于堆栈的,那个么当我们将代码表示为块时,为什么不需要进行寄存器分配呢

另外,llvm在哪里适合这种情况?我读到我们可以使用llvm核心和后端来编写java源代码。热点是否使用LLVM


共 (2) 个答案

  1. # 1 楼答案

    现代CPU使用多个寄存器,要将字节码转换为机器码,必须使用这些寄存器

    LLVM是与操作系统交互的虚拟机。HotSpot不使用LLVM,尽管有人建议过几次

  2. # 2 楼答案

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

    HotSpot不使用llvm,它是一个独立的开发。就我所见,有一个基于llvm的JVM实现称为J3,与HotSpot无关