根据我的阅读,有一个llvm程序将java字节码转换为llvm的中间形式,称为class2llvm。我的问题是,我该如何访问它。我必须安装什么前端才能访问它。
VMkit是他们的JVM实现,但我正在寻找如何使用llvm编译java源代码,而不是如何运行它。
答案 0 :(得分:30)
Java前端将Java字节码(.class文件)转换为LLVM 字节码。看看这个链接:
https://llvm.org/svn/llvm-project/java/trunk/docs/java-frontend.txt
答案 1 :(得分:6)
您可以查看dragonegg,这可以让llvm使用gcc的前端。由于gcc已经有了java的前端,称为 gcj ,也许llvm可以用它来编译java代码。但是我不确定llvm与gcc前端的接口有多好,所以这可能不起作用。
答案 2 :(得分:3)
我已经使用基于LLVM的vmkit(http://vmkit.llvm.org/)执行了一个java类。它使用LLVM来编译和优化高级语言到机器代码。 J3是使用VMKit的JVM的实现。
答案 3 :(得分:2)
[注意:从2015年11月起它不再是开源的,所以这个黑客大多没用。]
RoboVM可能会成为您正在寻找的解决方案。它是开源的,并将JVM字节码(.class文件)编译为机器代码。
我假设他们使用class2llvm这样做。
不幸的是,它仍处于alpha状态。我刚刚在HelloWorld.java上测试过它。它使单个内核上运行的加载时间增加了5倍。 (大多数运行时间是加载时间。)
echo Hello World! : <1 ms : 31K
(/ usr / bin / echo binary)
java HelloWorld : ~70 ms : 0.4K
(HelloWorld.class JVM字节码)
./HelloWorld : ~13 ms : 9.4MB
(9.3MB二进制+ 57K robovm-rt.jar)
请注意,java调用32MB $ JAVA_HOME / lib / rt.jar文件(可能更多)。在这么大的文件中搜索必须是java加载速度慢的部分原因。如果RoboVM变得更聪明,也许它可以抛弃大部分9.3MB二进制文件以获得更快的负载?
该网站提及iOS,但我认为这是因为他们正在销售他们的附加UI库。 RoboVM在Ubuntu的风格上编译得很好。请务必确保
$ sudo apt-get install g ++ - multilib
首先(也许安装libpthread-stubs0-dev和libpthread-workqueue0 ......不知道它们是否重要)。