Java到C交叉编译

Java到C交叉编译,java,c,compiler-construction,transpiler,Java,C,Compiler Construction,Transpiler,有人知道一个好的Java到C交叉编译器吗 它们工作得好吗?您能解释一下为什么要将Java代码移植到c吗 如果是为了性能,你可能不会看到太多的改进。Java是一种垃圾收集语言,目前还没有一种算法可以有效地插入内存分配和释放调用。有许多研究人员试图解决这个问题,他们有一些有趣的解决方案,但我还没有看到一个好的商业产品可以扩展到大型程序。有关更多信息,请查看以前会议的会议进程 如果你想加快你的代码速度,我建议你使用一个分析器,找到热门的方法。尝试并优化热方法,如果这还不够,尝试使用JNI。这与此问题非

有人知道一个好的Java到C交叉编译器吗


它们工作得好吗?

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

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


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

这与此问题非常相似,答案可能对您有所帮助:

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

好的第一步是将Java代码转换为只使用Java1.4中提供的标准库。事实上,为了简化移植过程,您可能希望尽可能地放弃java.lang.*或java.util.*包以外的任何东西

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


2016更新:不要这样做,现在不要,永远不要。用于提供此功能的选项没有得到维护(例如,GCJ),可以说,找到一位精通java的开发人员比找到一位精通C的开发人员要容易得多。此外,java性能不断提高,基线实现往往具有类似的性能。优化后的C速度更快,但随着每个JRE版本的增加,边缘变得越来越小。

除非您实现了整个标准库,否则这不会带来多少投资回报。一个基本的google会显示很多结果。你到底为什么要从Java转换成C?如果速度是一个问题,那么您可以尝试使用GCJ将Java编译为本机代码。虽然问题并不完全相同,但它已经足够接近于有效的答案:OP实际上希望从Java转换为VHDL(请参阅其他答案的注释)。他并没有表现出多大的兴趣;自从他问了这个问题后,他就再也没有回到过这样的状态。Java到VHDL XD哈哈哈,上帝啊,你真的想要一台机器来做到这一点吗??这也是FPGA工程师的典型特征。根据我的经验,他们是一群十足的牛仔。首先,我们喜欢从Java到C,然后从C到VHDL(用于在FPGA或ASIC中实现)。@Martin:那么你想从Java到VHDL,而最好的路径似乎是使用C?您可能想编辑您的问题,或者吸引一个新的问题,看看是否有人有更好的方法从Java开始并获得VHDL。我想起了90年代中期,当时我使用f2c将Fortran线性编程代码更改为C,这样我就可以将其与Macintosh Common Lisp进行交互。5年前,这是一个不确定的想法,现在是一个非常糟糕的想法。您的C可能比最初的Java慢(JRE 8大约和大多数C编译器一样聪明),而且gcj最多只支持Java 4,有些支持Java 5。我们现在使用的是Java8,只有最琐碎的实现才会由GCJ编译。这个想法有多糟糕?我转换了一个微基准来做一个简单的测试(解析文本,计算单词,然后排序)。结果:Java8,实时性8.492s,CPU时间13.850s。GCJ编译二进制文件:28.191s实时,27.850s CPU时间。