我计划使用Necessitas将Qt代码移植到Android平台。乍一看,我注意到尽管是本机代码,但所有东西仍然通过Dalvik VM。
我的问题是,这会带来开销吗?一开始,Java的效率低于原生c++,而Dalvik与vanilla Java相比则相当不成熟,这就是我担心的原因。
发布于 2012-02-11 01:25:18
在Android文档中,您可以找到以下提示:
Java代码不一定比
更高效。首先,与Java到本机转换相关的成本很高,而且JIT不能跨越这些边界进行优化。如果您正在分配本机资源(本机堆上的内存、文件描述符或其他任何资源),那么安排这些资源的及时收集可能会更加困难。您还需要为您希望在其上运行的每个体系结构编译代码(而不是依赖于拥有JIT)。你甚至可能不得不为你认为相同的架构编译多个版本:在G1中为ARM处理器编译的本机代码不能充分利用Nexus One中的ARM,并且在Nexus One中为ARM编译的代码不能在G1中的ARM上运行。
粗略的Dalvik代码比为该平台优化的纯C/C++慢。但是本机代码和Java代码之间的通信是通过JNI进行的,这是开销的主要来源。
所以你的问题的答案是肯定的,JNI引入了额外的开销。但是如果你想移植现有的C/C++代码,ndk是最好的选择。
https://stackoverflow.com/questions/9231821
复制相似问题