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

dte*_*ech 2 c++ performance qt dalvik

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

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

Yur*_*ury 5

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

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

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

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