我一直在用Java开发图像处理应用程序,但我最近对VALA感兴趣。原因是因为我相信我可以提高应用程序性能(我的担心主要在于与C / C ++库的互连,因为它似乎< Example>使用C / C ++桥时存在性能损失在Java)。
背景(我所知道):
我的头脑里有些东西,我找不到答案:
有什么见解?
答案 0 :(得分:6)
<强> 1。可以使用AOT编译器生成C / C ++可消耗库吗?
它应该是不可能的,因为我们没有头文件,它不是AOT编译器正在创建的C类,而只是机器代码。
(旁注:Java类可以是called inside C/C++,但是由于AOT编译器生成单个二进制文件,我确信您无法从该文件外部访问Java类。
答案:否
<强> 2。生成的AOT二进制文件是否仍然存在桥接性能问题?
首先,我们需要知道:如果使用桥接器(如JNI,javacpp等)从Java调用任何C / C ++类,总会导致性能下降?
根据## java@irc.freenode.net的“W_”:
这取决于你如何调用它(例如,如果参数必须是 转换等)。 只是在没有任何参数的情况下调用库函数或返回 类型转换不应该采取任何不同的时间 C app。
但是当我使用JavaCV作为OpenCV库的桥接器时,它使用了几种类型的对象,如果上述情况属实,它会影响性能。
因此,AOT编译可能会加快执行速度,但仍需要通过桥接器进行类型转换。
答案:是(但可能稍快)
第3。在VALA中调用C / C ++库与从C调用它们具有相同的性能吗?
由于它直接转换为C,我没有找到原因。这得到了来自#vala@irc.gimp.org的“nemequ”的支持:
非常,是的。 vala习惯使用临时变量,但是 这正是大多数编译器可以轻松优化的东西 远。如果你正在使用gcc,那么传递-O2你应该很好。
答案:是
我仍然不知道为什么“某人”投票决定关闭我的问题,他/她甚至不打算对此发表评论。 我认为这些问题/答案足够具有建设性(如 pst 评论),它们可能对其他对VALA或AOT编译器不熟悉的人有所帮助。
如果我的结论不正确,请纠正我。