10

我正在寻找一种将 C 源代码编译成高性能 Java 字节码的方法。我已经成功使用了 NestedVM,但是对于我正在处理的项目来说,性能损失是不可接受的。我还看到了针对这个问题的各种开源项目和一些商业产品。 这个 SO question处理将非 Java 转换为 Java 源的一般问题,但我只想从 C 到 Java 字节码。

将 C 源代码编译为高性能、纯 Java 字节码的最佳方法是什么?

4

4 回答 4

9

Being the author of Cibyl, I might be biased here. Anyway, I've looked at the java bytecode generated by the axiomatic C compiler, and it is not efficient. NestedVM and Cibyl both works by compiling MIPS binaries and then translating the binary into Java bytecode. It's surprisingly efficient, with the main problem being memory access of 8- and 16-byte values (which needs to be done in multiple steps).

NestedVM and Cibyl have slightly different performance characteristics, with Cibyl typically being faster for integer-heavy workloads whereas NestedVM handles floats and doubles better. This is because Cibyl uses GCC soft-float support (though using "real" Java bytecode floating point instructions) while NestedVM translates MIPS FPU instructions.

Cibyl is also more targeted to J2ME environments, although it's definately useable on other platforms as well. My guess is that you would have more luck with either of them than with the Axiomatic C compiler.

于 2009-09-22T13:35:37.027 回答
4

这并不完全符合您的要求,但Cibyl将已编译的C 程序转换为 JVM 字节码。这与 NestedVM(您提到的)的想法相同,但对于您的任务来说可能更快,因为它是一个独立的实现。

于 2009-01-20T01:37:26.693 回答
3

我相信有些项目已经尝试过这个,但是没有办法处理指针,而不会对什么可以访问什么有一些非常严格的限制(基本上它们必须转换为数组索引和分配的数组而不是内存)

如果你有 C 而不过多依赖指针,并且你希望它进入 JVM,你可能只是将它转换为 Java——应该很容易并且性能应该不会太差。在大多数领域,C 仍然比 Java 高出大约 2 倍,有些领域更差,在少数领域,Java 实际上胜过 C(堆内存管理,例如),但与大多数其他语言(至少是解释型语言)相比,java 和 c 是快 100 倍,所以从这个角度来看,它们之间的区别是毫无意义的。

于 2009-01-20T01:39:17.640 回答
1

试试 C2J 软件......

在谷歌中输入 c 到 java 翻译器。你会得到下载链接

于 2009-11-12T08:45:32.423 回答