Java到C交叉编译

Mar*_*rau 6 c java compiler-construction transpiler

有谁知道一个好的Java到C交叉编译器?

他们运作得好吗?

Bob*_*Gee 6

这与这个问题非常相似,答案可能对您有所帮助:Compiler to translate Java to C

简介: 有用于此的工具(Toba、GCJ 等),但您可能会遇到并非所有 Java 库都被移植的问题。最后,工具可能只会完成部分工作,而您必须手动编写其余部分的代码。

良好的第一步是将您的 Java 代码转换为仅使用 Java 1.4 中可用的标准库。事实上,为了简化移植过程,您可能希望尽可能地远离 java.lang.* 或 java.util.* 包中的任何内容。

根据代码库的大小,直接重写批量实际上可能比依赖工具更容易。 Java 和 C 有很多语法相似之处,但是 C 的直接过程代码与 Java 的面向对象特性之间的不匹配可能会导致问题。 尝试解决此问题时,自动化工具可能会生成几乎无法维护的 C 代码,并且始终存在出现细微错误的可能性。

2016 年更新:不要这样做,现在不要,永远不要。用于提供此功能的选项尚未维护(例如 GCJ),并且可以说找到精通 Java 的开发人员比 C 更容易。此外,Java 性能不断提高,基线实现往往具有相似的性能。优化后的 C 仍然更快,但每个 JRE 版本的边缘都变得越来越小。

  • 多么糟糕的主意?我将一个微基准转换为一个简单的测试(解析文本和计算单词,然后排序)。结果:Java 8,8.492 秒实时,13.850 秒 CPU 时间。GCJ 编译二进制:28.191 秒实时,27.850 秒 CPU 时间。 (2认同)

Ste*_*ial 5

您能解释一下为什么要将 Java 代码移植到 C 吗?

如果是为了性能,您可能不会看到太大的改进。Java 是一种垃圾收集语言,目前还没有一种算法可以有效地插入内存分配和释放调用。有许多研究人员试图解决这个问题,他们有一些有趣的解决方案,但我还没有看到可以扩展到大型程序的良好商业产品。您可以查看往届ISMM会议的会议记录以了解更多信息。

如果您想加快代码速度,我建议您使用分析器并找到热门方法。尝试并优化热门方法,如果这还不够,请尝试使用 JNI。