android – Native C库 – 谁必须释放内存以及如何?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android – Native C库 – 谁必须释放内存以及如何?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1194字,纯文字阅读大概需要2分钟。
内容图文
这是关于Android的.情况:
C库和java包装器类以及用于处理库中C类的本机函数(JNI).当常见的Java代码需要C对象时,它会创建相应的java包装器对象,该对象通过本机函数创建C对象,并在“long”变量中记住指向本机对象的指针.在所有下一个操作中,包装器将此指针指向本机函数等.
问题:
如何在最后释放所有分配的C对象?目前,每个包装类都有’finalize’方法,它调用本机函数来释放C对象,但Android不保证调用’finalize’!另一方面,通常C库不知道java代码分配了多少和哪些类型的C对象.
当我们的Java应用程序终止时,剩下的已分配内存将会发生什么,当操作系统卸载库时,Android会自动释放从本机库使用的整个堆吗?
解决方法:
在进程生命周期结束时,系统将释放并回收所有进程内存(Java和C堆).但有一点是,Android活动结束并不一定会结束这个过程.我不确定那里的流程关闭政策是什么.
另一方面,依赖于垃圾收集和finalize()听起来像是坚实的设计.你声称 – “Android不保证finalize()”.你有没有引用它?因为如果它附带免责声明“当对象作为进程关闭的一部分被释放时……”,那么我们仍然很好.
如果你是超级偏执狂,你可以编写自己的malloc()/ free()/ realloc()包装器,存储所有已分配对象的列表,并引入一个清理函数,遍历列表并释放它们.但是,包含Java对象可能以一种奇怪的僵尸状态结束,其中内存已从其下面释放.这是一个很容易出错的棘手主张.所以我仍然会说 – 对垃圾收集器有信心.缺乏这将是令人不安的.
内容总结
以上是互联网集市为您收集整理的android – Native C库 – 谁必须释放内存以及如何?全部内容,希望文章能够帮你解决android – Native C库 – 谁必须释放内存以及如何?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。