【问题标题】:Dalvik's effect on native c++ code performance?Dalvik 对原生 c++ 代码性能的影响?
【发布时间】:2012-02-10 17:10:39
【问题描述】:

我计划使用 Necessitas 将 Qt 代码移植到 Android 平台。乍一看,我注意到尽管是原生代码,但一切仍然通过 Dalvik VM。

我的问题是这会带来开销吗? Java 从一开始就不如原生 c++ 高效,而且与普通 Java 相比,Dalvik 相当不成熟,这是我担心的原因。

【问题讨论】:

  • Dalvik 在运行时与 Java 没有连接。重新标记。
  • 通过JNI调用是有开销的,但是代码一旦运行,就全速运行。 Dalvik VM 是应用程序进程的所有者,但本机代码在本机运行:)
  • @BitBank - 谢谢,这正是我想知道的,开销是“一次性”还是“连续”

标签: c++ performance qt dalvik


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多