本文主要是介绍Java 中的内存泄漏 与 无意识的对象保留,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(1)内存泄漏 和 无意识对象保留
JVM 不存在任何被证实的内存泄漏问题。垃圾收集器一般来说会精确的判断哪些对象可被收集,并且重新回收他们的内存空间。如果存在内存耗尽的错误,基本上是程序本身造成的。
C++没有垃圾收集机制。C++中存在真正的垃圾泄漏问题。而Java语言只有无意识的对象保留问题。
(2)内存泄漏 监测工具的工作原理
系统达到一个稳定的状态,这个状态下大多数新产生的对象都是暂时的,符合被收集的条件;这种状态一般在程序所有的初始化工作都完成了之后。
强制进行一次垃圾收集,并且对此时的堆做一份对象快照。
进行任何可以产生无意地保留的对象的操作。
再强制进行一次垃圾收集,然后对系统堆中的对象做第二次对象快照。
比较两次快照,看看哪些对象的被引用数量比第一次快照时增加了。因为您在快照之前强制进行了垃圾收集,那么剩下的对象都应该是被应用程序所引用的对象,并且通过比较两次快照我们可以准确地找出那些被程序保留的、新产生的对象。
(3)程序中显式置空(null)有没有用
答:会提高程序的运行效率。
如下面的例子(不手动置空的情况):
方法执行完毕à变量sb失去了作用域à运行时栈置sb为nullà该对象可以被垃圾收集
这篇关于Java 中的内存泄漏 与 无意识的对象保留的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!