Dalvik对本机c ++代码性能的影响?

时间:2012-02-10 17:10:39

标签: c++ performance qt dalvik

我计划使用Necessitas将Qt代码移植到Android平台。在第一眼看到我注意到尽管是本机代码,一切仍然通过Dalvik VM。

我的问题是这会引入开销吗? Java开头的效率低于原生c ++,与vanilla Java相比,Dalvik相当不成熟,这是我担心的原因。

1 个答案:

答案 0 :(得分:5)

在Android文档中,您可以找到以下提示:

  

本机代码不一定比Java更有效。一方面,   与Java本机转换和JIT相关的成本   无法跨越这些边界进行优化。如果你要分配本机   资源(本机堆上的内存,文件描述符或其他),   安排及时收集可能要困难得多   这些资源。您还需要为每个代码编译代码   你希望运行的架构(而不是依赖它有一个JIT)。   您甚至可能需要为您考虑的内容编译多个版本   相同的架构:为ARM处理器编译的本机代码   G1无法充分利用Nexus One中的ARM和代码   在Nexus One中针对ARM编译的将不会在G1中的ARM上运行。

粗略地说,Dalvik代码比针对平台优化的纯C / C ++慢。但是本机代码和Java代码之间的通信是通过JNI进行的,JNI是开销的主要来源。

所以你的问题的答案是肯定的,JNI引入了额外的开销。但是如果你想要移植现有的C / C ++代码,ndk是你的最佳选择。