是否有一个llvm java前端将java源转换为llvm的中间形式?

时间:2012-05-29 17:58:25

标签: java llvm bytecode

根据我的阅读,有一个llvm程序将java字节码转换为llvm的中间形式,称为class2llvm。我的问题是,我该如何访问它。我必须安装什么前端才能访问它。

VMkit是他们的JVM实现,但我正在寻找如何使用llvm编译java源代码,而不是如何运行它。

4 个答案:

答案 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 ......不知道它们是否重要)。