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

lep*_*epe 10 c# java vala aot

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

背景(我所知道):

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

有一些事情在我脑海里蔓延,我无法找到答案:

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

任何见解?

lep*_*epe 6

1.可以使用AOT编译器生成C/C++可消耗库吗?

它应该是不可能的,因为我们没有头文件,它不是AOT编译器正在创建的C类,而只是机器代码.

(旁注:可以在C/C++中调用 Java类,但是由于AOT编译器生成单个二进制文件,我确信您无法从该文件外部访问Java类).

答:没有

2.生成的AOT二进制文件是否仍然存在桥接性能问题?

首先,我们需要知道:如果使用桥接器(如JNI,javacpp等)从Java调用任何C/C++类,总会导致性能下降?

根据##java@irc.freenode.net上的"W_":

这取决于你如何调用它(例如,如果必须转换参数等).只调用没有任何参数或返回类型转换的库函数不应该花费任何不同于任何C应用程序的时间.

但是当我使用JavaCV作为OpenCV库的桥接器时,它使用了几种类型的对象,如果上述情况属实,它应该会影响性能.

因此,AOT编译可能会加快执行速度,但仍需要通过桥接器进行类型转换,这可能是合乎逻辑的.

答案:是(但可能稍快)

3.在VALA中调用C/C++库与从C调用它们具有相同的性能吗?

由于它直接转换为C,我没有找到原因.这得到了来自#vala@irc.gimp.org的"nemequ"的支持:

差不多,是的.vala习惯使用临时变量,但这正是大多数编译器可以轻松优化的东西.如果你正在使用gcc,传递-O2你应该是好的.

答:是的

我仍然不知道为什么"某人"投票结束我的问题,他/她甚至不打算对此发表评论.我认为这些问题/答案足够具有建设性(如pst评论),它们可能对其他对VALA或AOT编译器不熟悉的人有所帮助.

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