gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:37:02 25 4
gpt4 key购买 nike

我想为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com