然后,我应该能够使用标准的C编译器将C代码编译成目标平台的可执行文件。我理解这种方法只适用于某些不经常修改的Java应用程序。
那么有哪些Java到C的编译器可用?
为什么这样做?Java虚拟机包含一个运行时的Java-to-assembly编译器。
在运行时进行编译可以获得更好的性能,因为所有关于运行时值的信息都是可用的。而预先编译必须对运行时值进行假设,因此可能会产生不太快的代码。有关详细信息,请参阅Cliff Click的Java vs C performance。
https://github.com/badlogic/jack -- 一个Java到C++的转换器,忽略了内存模型和其他东西,使用Boehm GC导致速度变慢并出现GC暂停
许可证对我来说不太清楚。
http://ptolemy.eecs.berkeley.edu/publications/papers/03/java-2-C/ -- 面向嵌入式系统的可重定向优化Java到C编译器
这是一篇论文,不确定是否有可用的程序。
(我一直在谷歌上搜索这些内容,这就是我来到SO上的问题的原因。)
不是我自己问题的答案,但 Oracle 是如何做到的呢?
http://download.oracle.com/docs/cd/B28359_01/java.111/b31225/chone.htm#BABCIHGA
曾经有一个名为TowerJ的产品,它本质上是Java的“通过C”静态编译器,但现在已经不存在了。
我听说Sun Labs在Sun SPOT项目中创建了类似的东西,但我不确定它是否公开。
@BobMcGee:在你提到的基准测试中,GCJ确实输了,但Excelsior JET(这是一个32位AOT编译器)在所有三个测试系统上都击败了32位HotSpot,所以我不确定你的观点是什么。
但毕竟,谎言、可恶的谎言和基准测试。