当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《LLVM和java字节码有什么区别?》经验,为你挑选了2个好方法。

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

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



1> nimrodm..:

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

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

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

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


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

2> Owen..:

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

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.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有