如何将Java bytecode编译成LLVM IR,即有没有可用的LLVM的Java前
来源:网络整理 网络用户发布,如有版权联系网管删除 2018-07-23
要回答题主的问题
如何将Java bytecode 编译成llvm ir,即有没有可用的llvm 的Java前端?取决于题主实际要达到的目的是什么。
请问题主实际上是想得到一个免费、开源、跨平台、基于LLVM的AOT编译的解决方案么?类似GCJ之于GCC的那种?
是的话,那重点不只是一个LLVM的Java bytecode前端,更重要的是用于支撑它的配套的运行时系统。
RoboVM是一个现在还活着的、跟题主所想像的东西接近的项目。
官网:RoboVM | Create truly native iOS apps in Java
Github:robovm/robovm GitHub
它跟VMKit相似之处在于两者都尽可能使用现成的库组合起来实现JVM的功能。
例如说RoboVM的Java字节码编译器的前端使用了Soot分析框架,后端使用了LLVM。
显然,LLVM作为buzzword更响亮所以各种宣传都只是突出说明RoboVM基于LLVM其实Soot的历史更久远。
RoboVM的runtime的重要组成部分之一,GC,用的是GCJ版的Boehm GC。
另外,runtime的某些部分看起来“参考”了Dalvik VM。
最后放个传送门:Java中有类似于Ngen的工具(AOT编译器)吗? - RednaxelaFX 的回答
===================================================
话说鄙司在做基于LLVM的、用在JVM里的JIT编译器。暂时还没计划、但不排除未来也会做AOT。
传送门:如何看待微软新出的LLILC,一个新的基于LLVM的CoreCLR JIT/AOT编译器? - RednaxelaFX 的回答
话说回来,OpenJDK里的HotSpot VM在使用Zero/Shark VM模式编译的时候,其中的Shark JIT编译器也是基于LLVM的。那个里面自然也有一个LLVM的Java bytecode前端。但如果题主想要的是AOT功能的话,这玩儿多半没啥意义。
传送门:OpenJDK: Zero-Assembler Project,其中的前端的代码:jdk8u/jdk8u/hotspot: d4d494a56017 src/share/vm/shark/sharkBlock.cpp
查看评论 回复