Skip to content
阅读进度

JNI、NDK 与 native 崩溃是什么关系? ​

返回 兼容与平台扩展 目录

标准回答 ​

JNI 是托管代码与本地代码交互的接口;NDK 是开发 Android 本地代码的工具集;native 层没有 Java GC 替你管理所有资源,越界和无效指针等会造成原生崩溃。

关键机制 ​

  • JNIEnv 与线程关联,不能跨线程直接复用;本地线程使用 JNI 前要按规则附着并在合适时机分离。
  • 区分局部与全局引用,及时释放全局引用和本地资源;频繁跨 JNI 边界和大量拷贝可能产生额外开销。
  • 维护目标 ABI、so 依赖、符号文件和构建版本,结合 tombstone 做符号化定位。

通俗例子 ​

硬件算法 SDK 返回图像结果时,应明确内存由谁分配、谁释放、生命周期多长,避免 Java 与 native 双方都以为对方负责。

易混淆点 ​

改成 C++ 不会自动更快。调用频率、拷贝量、算法和并发才决定实际收益。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。