有没有一个llvm Java前端将Java源代码转换为llvm的中间forms?
从我读过的,有一个llvm程序将java字节码转换为llvm的中间forms,叫做class2llvm。 我的问题是,我如何访问这个。 为了访问这个,我需要安装哪些前端。
VMkit是他们的JVM的实现,但我正在寻找如何编译与llvm Java源代码,而不是如何运行它。
Java前端将Java字节码(.class文件)转换为LLVM字节码。 看看这个链接:
https://llvm.org/svn/llvm-project/java/trunk/docs/java-frontend.txt
你可以看看dragonegg ,它使得llvm可以使用gcc的前端。 由于gcc已经有一个名为gcj的 java前端,所以llvm可以使用它来编译java代码。 但是我不确定llvm与gcc前端的接口有多好,所以这可能不起作用。
我已经使用基于LLVM的vmkit( http://vmkit.llvm.org/ )执行了一个java类。 它使用LLVM编译和优化高级语言到机器码。 J3是带有VMKit的JVM的一个实现。
[ 注意:从2015年11月开始,它不再是开源的,所以这个破解大多是无用的。 ]
RoboVM可能成为您正在寻找的解决scheme。 它是开源的,将JVM字节码(.class文件)编译成机器码。
我假设他们使用类似class2llvm的东西。
不幸的是,它仍然是阿尔法。 我刚刚在HelloWorld.java上进行了testing。 它在单个内核上运行速度提高了5倍。 (大部分运行时间是加载时间。)
echo Hello World! : <1 ms : 31K
echo Hello World! : <1 ms : 31K
(/ usr / bin / echo二进制)
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文件(也许更多)。 在这样一个大文件中search必须是Java加载速度如此之慢的部分原因。 如果RoboVM变得更聪明,也许它可以抛出大部分的9.3MB的二进制文件更快的负载?
网站提到的iOS,但我认为这是因为他们正在销售他们的附加用户界面库。 RoboVM在Ubuntu的风格上编译得很好。 只要确保做到
$ sudo apt-get install g ++ – multilib
首先(也许安装libpthread-stubs0-dev和libpthread-workqueue0 …不知道他们是否重要)。