Java到C交叉编译[关闭]
Posted
技术标签:
【中文标题】Java到C交叉编译[关闭]【英文标题】:Java to C cross compilation [closed] 【发布时间】:2010-02-02 16:16:30 【问题描述】:有人知道一个好的 Java 到 C 交叉编译器吗?
它们工作得好吗?
【问题讨论】:
除非您实现了整个标准库,否则这不会带来太大的投资回报。一个基本的谷歌显示很多结果。 为什么要从 Java 转换为 C?如果速度是个问题,您可以随时尝试使用 GCJ 将 Java 编译为本机代码。 虽然问题不完全一样,但它已经足够接近,答案是有效的:***.com/questions/1096615/… OP 实际上想从 Java 转到 VHDL(请参阅其他答案的评论)。他并没有表现出很大的兴趣。自从他提出这个问题后,他就再也没有回到 SO。 Java to VHDL XD hahahahahaha 上帝,你真的想要一台机器来做吗?这也是 FPGA 工程师的典型特征。根据我的经验,他们是一群十足的牛仔。 【参考方案1】:这与这个问题非常相似,答案可能对您有所帮助: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 版本的边缘都变得越来越小。
【讨论】:
5 年前这是一个不靠谱的想法,现在它是一个完全可怕的想法。您的 C 可能比原始 Java 慢(JRE 8 与大多数 C 编译器一样聪明),并且作为奖励 gcj 仅支持 Java 4,并支持一些 Java 5。我们现在使用的是 Java 8,现在只有最简单的实现才能被 GCJ 编译。 这个想法有多糟糕?我为一个简单的测试转换了一个微基准(解析文本和计算单词,然后排序)。结果:Java 8,8.492s 实时,13.850s CPU 时间。 GCJ 编译二进制:28.191s 实时,27.850s CPU 时间。【参考方案2】:您能解释一下为什么要将 Java 代码移植到 c 中吗?
如果是为了性能,您可能不会看到太大的改进。 Java 是一种垃圾收集语言,目前还没有一种算法可以有效地插入内存分配和释放调用。有许多研究人员试图解决这个问题,他们有一些有趣的解决方案,但我还没有看到一个可以扩展到大型程序的好的商业产品。您可以查看以前的ISMM 会议的会议记录以获取更多信息。
如果您想加快代码速度,我建议您使用分析器并找到热门方法。尝试优化热门方法,如果还不够,请尝试使用 JNI。
【讨论】:
第一个我们喜欢从 Java 到 C,然后从 C 到 VHDL(实现到 FPGA 或 ASIC)。 @Martin:所以你想从Java转到VHDL,最好的路径看起来像使用C?您可能想编辑您的问题,或者吸引一个新问题,看看是否有人有更好的方法来开始使用 Java 并获得 VHDL。我想起了 90 年代中期,当时我使用 f2c 将 Fortran 线性编程代码更改为 C,以便可以将其与 Macintosh Common Lisp 接口。以上是关于Java到C交叉编译[关闭]的主要内容,如果未能解决你的问题,请参考以下文章