LLVM和java字节码有什么区别?

2022-08-31 12:54:54

我不明白LLVM和java(字节码)之间的区别,它们是什么?

-edit-通过“他们是什么”,我的意思是LLVM和java(字节码)之间的差异,而不是LLVM和java之间的区别。


答案 1

假设你指的是JVM而不是Java:

LLVM 是基于寄存器的低级虚拟机。它旨在抽象底层硬件,并在编译器后端(机器代码生成)和前端(解析等)之间划清界限。

JVM 是一个更高级别的基于堆栈的虚拟机。JVM提供垃圾回收,具有对象和虚拟方法调用的概念等等。因此,JVM为语言互操作性提供了更高级别的基础设施(很像微软的CLR)。

(可以在LLVM上构建这些抽象,就像可以在C之上构建它们一样。


答案 2

太糟糕了,这个问题走错了路。我来这里是为了寻找更详细的比较。

JVM字节码和LLVM位码之间最大的区别在于JVM指令是面向堆栈的,而LLVM位码不是。这意味着 JVM 字节码不是将值加载到寄存器中,而是将值加载到堆栈上并从那里计算值。我相信这样做的一个优点是编译器不必分配寄存器,但我不确定。

LLVM 位码更接近机器级代码,但不受特定体系结构的约束。例如,我认为LLVM位码可以使用任意数量的逻辑寄存器。也许更熟悉LLVM的人可以在这里发言?


推荐