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

66 java comparison jvm llvm

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

-edit-由'他们是什么'我的意思是LLVM和java(字节码)之间的差异,而不是LLVM和java.

nim*_*odm 83

假设您的意思是JVM而不是Java:

LLVM是基于寄存器的低级虚拟机.它旨在抽象底层硬件并在编译器后端(机器代码生成)和前端(解析等)之间绘制一条简洁的线.

JVM是一个更高级别的基于堆栈的虚拟机.JVM提供垃圾收集,具有对象和虚方法调用等概念.因此,JVM为语言互操作性提供了更高级别的基础结构(非常类似于Microsoft的CLR).

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

  • @Robert Zaremba你有没有试过用LLVM实现垃圾收集?我有.你基本上必须自己完成它们(它们甚至不提供简单的垃圾收集器,尽管有一个过时的例子浮动).LLVM只为您的代码提供内在函数以挂钩到GC.而不是JVM,它提供了一个内置的强制垃圾收集器,可以自动处理所有对象. (13认同)
  • LLVM具有垃圾收集器支持[更多此处](http://llvm.org/docs/GarbageCollection.html) (2认同)

Owe*_*wen 26

这个问题在错误的脚上走了太糟糕了.我来找它寻找更详细的比较.

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

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

  • 从性能的角度来看,在堆栈上加载值是不利的**.请看[this](http://static.usenix.org/events/vee05/full_papers/p153-yunhe.pdf)pdf. (6认同)