java - Android NDK是否继承Java问题?

标签 java android performance android-ndk

我想为 Android 创建游戏,我需要在 SDK 和 NDK 之间做出选择。手机硬件有限,我想避免速度变慢,但 Java 很慢,而且占用内存太多。

NDK 应用是否比 SDK 应用更快、更高效?

Java 使用垃圾收集器,所有对象都在堆上分配,我不能在另一个对象内部分配一个对象(没有指针),一个用作结构的简单类继承了 Object 类。

我的 NDK 程序会被转换成 Java 字节码吗?编译器会忽略我的删除调用、添加垃圾收集器、添加 Object 类并将我的所有对象转移到堆吗?

最佳答案

我会尝试澄清一些事情:

  • 在 Android 上,您始终使用 SDK 进行开发。您可以将 NDK 视为 SDK 的插件。 NDK 的作用是允许您开发 native 代码(例如 C/C++)以配合您的 Java 代码(您在每一端做什么取决于您)
  • NDK 应用程序是否更快?同样,这取决于你在做什么。 Java 可以在具有 JIT 的设备上快速完成很多事情。编写良好的 C/C++ 代码通常更快,是的。但是,你还必须为往返 Java/native 支付罚款(通过 JNI)
  • 如果您仔细观察,就会发现有使用 NDK 编写的适用于 Android 的游戏引擎。从 NDK r5(当然还有更新的 Android 版本)开始,您无需先通过 Java/JNI 即可从 NDK 绘制到屏幕,这可以带来巨大的性能提升。
  • 不,您的 native 代码绝对不会转换为字节码。它将被编译为原生 ARM/MIPS/x86/任何机器代码。
  • 除非您在 native 代码中实现自己的 GC,否则 new、delete 等将正常运行。 Java VM 对您的 native 分配一无所知,除非您显式调用 JNI 方法来创建新对象。

关于java - Android NDK是否继承Java问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6687855/

相关文章:

android - @Parcelize 未解决,androidExtensions 实验模式设置为 true

android - 根据 RecyclerView 每行中的数据类型膨胀行 View

javascript - 有哪些高级技术可以缩短绘制或渲染时间?

java - 我应该使用哪种 Java RMI/RPC/IPC 技术?

android - 将 armeabi 和 armeabi-v7a 库与 APK 拆分一起使用

java - 热衷于检查 FTPFile 类型的数组是否为字符串?

javascript - 如何在类构造函数中实现 'tracking' 对象?

c - 在cuda中,加载到共享内存比加载到寄存器慢

java - 如何在 Java 应用程序中通过命令行扫描 S3 文件?

两个 URL 编码字符串之间的 Java 区别