LLVM和java字节码有什么区别?
我不明白LLVM和Java(字节码)之间的区别,它们是什么?
-edit-“他们是什么”我的意思是LLVM和Java(字节码)之间的差异,而不是什么LLVM和Java。
假设你的意思是JVM而不是Java:
LLVM是基于寄存器的低级虚拟机。 它被devise为抽象底层硬件,并在编译器后端(机器代码生成)和前端(parsing等)之间画一条干净的线。
JVM是一个更高层次的基于堆栈的虚拟机。 JVM提供了垃圾收集,具有对象和虚拟方法调用的概念等等。 因此,JVM为语言互操作提供了更高层次的基础设施(就像微软的CLR一样)。
(可以在LLVM上构build这些抽象,就像在C上构build它们一样。)
这个问题是错误的,这太糟糕了。 我来到它寻找更详细的比较。
JVM字节码和LLVM位码之间的最大区别在于JVM指令是面向堆栈的,而LLVM位码则不是。 这意味着JVM字节码不是将值加载到寄存器中,而是将值加载到堆栈上并从那里计算值。 我相信这样做的好处是编译器不必分配寄存器,但我不确定。
LLVM比特码更接近机器级代码,但不受特定架构的约束。 例如,我认为LLVM位码可以使用任意数量的逻辑寄存器。 也许有人更熟悉LLVM可以在这里说话吗?
Java是一种编程语言,它使用JVM作为“即时”(JIT)执行的手段,而LLVM是一种编译器构build工具包,旨在为现有语言开发新的语言和前端。 LLVM 确实有一个JIT引擎,但是如果你不需要,它不需要使用。 您可以抛出LLVM汇编程序,字节码或平台特定的汇编程序,而不是使用JIT执行。