Skip to content
阅读进度

如何理解Native 内存与 JNI 生命周期? ​

返回 性能与稳定性 目录

标准回答 ​

先确认Native或相关映射持续增长,再用heapprofd等分配采样定位保留分配的调用栈,或在可控构建中采用分配跟踪工具。采样数据有粒度和开销限制,不能把未采样到的小对象当成不存在。

JNI常见问题包括malloc资源未释放、全局引用未删除、重复创建Native对象、异常路径漏清理,以及线程或缓冲生命周期错误。Java包装对象被回收,不保证所有Native资源立即正确释放。

修复应明确谁创建、谁关闭、何时转移所有权,用成对释放与异常清理减少分支遗漏,再重复场景看保留量。Native堆正常时继续排查映射、DMA或图形资源,不能停在一个工具。

追问与回答 ​

JNIEnv能在多线程间随便传吗 ​

不能。JNIEnv与当前线程相关,Native线程需按契约attach/detach;跨线程共享Java对象还需正确引用类型和同步。

参考资料 ​

内容来源 ​

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