VALA与AOT汇编之间的表现差异?

时间:2012-01-16 02:38:23

标签: c# java vala aot

我一直在用Java开发图像处理应用程序,但我最近对VALA感兴趣。原因是因为我相信我可以提高应用程序性能(我的担心主要在于与C / C ++库的互连,因为它似乎< Example>使用C / C ++桥时存在性能损失在Java)。

背景(我所知道):

  • VALA转换为C代码,然后将其编译为本机机器代码。
  • AOT(Java / Mono C#)也可以生成本机机器代码(而不是使用VM,但仍需要运行时包)。
  • 在某些情况下使用VM,可能比本机机器代码更快(因为它可以通过JIT编译器进行优化)。
  • 可以使用VALA生成耗材C / C ++库。

我的头脑里有些东西,我找不到答案:

  1. 可以使用AOT编译器生成C / C ++可消耗库吗? (我猜不会)。
  2. 生成的AOT二进制文件是否仍然存在桥接性能问题? (我猜它确实如此)。
  3. 在VALA中调用C / C ++库与从C调用它们具有相同的性能吗? (我想是的)。
  4. 有什么见解?

1 个答案:

答案 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编译器不熟悉的人有所帮助。

如果我的结论不正确,请纠正我。