外观
JNI、NDK 与 native 崩溃是什么关系?
标准回答
JNI 是托管代码与本地代码交互的接口;NDK 是开发 Android 本地代码的工具集;native 层没有 Java GC 替你管理所有资源,越界和无效指针等会造成原生崩溃。
关键机制
- JNIEnv 与线程关联,不能跨线程直接复用;本地线程使用 JNI 前要按规则附着并在合适时机分离。
- 区分局部与全局引用,及时释放全局引用和本地资源;频繁跨 JNI 边界和大量拷贝可能产生额外开销。
- 维护目标 ABI、so 依赖、符号文件和构建版本,结合 tombstone 做符号化定位。
通俗例子
硬件算法 SDK 返回图像结果时,应明确内存由谁分配、谁释放、生命周期多长,避免 Java 与 native 双方都以为对方负责。
易混淆点
改成 C++ 不会自动更快。调用频率、拷贝量、算法和并发才决定实际收益。
参考资料
内容来源
- Android 技术札记 · 原条目
jni