介绍介绍 Java 的内存泄漏的内存泄漏
java明显的一个优势是它的内存管理机制。你只需简单创建对象,java的垃圾回收机制负责分配和释放内存。然而情况并
不像想像的那么简单,因为在Java应用中经常发生内存泄漏。
本教程演示了什么是内存泄漏,为什么会发生内存泄漏以及如何预防内存泄漏。
什么是内存泄漏?
定义:如果对象在应用中不再被使用,但由于它们在其他地方被引用,垃圾回收却不能移除它们(这样造成了很多内存不
能释放,从而导致内存溢出的现象。译注)。
要理解这一定义,我们需要理解内存中对象的状态。下图说明了那些是未使用,那些是未引用。
从图中可以看到被引用对象和未引用对象(的范围)。未引用对象可以被垃圾回收机制回收,而被引用对象不能被垃圾回
收机制回收。未引用对象当然是没有使用的,因为没有其他对象引用了它。然而未使用对象并不都是未引用的。某些未使用的
对象仍然被其他地方引用!这是内存泄漏起因。
为什么会发生内存泄漏?
让我们来下面的这个例子,看看为什么会发生内存泄漏。在如下例子中,A对象引用了B对象。A的生命周期(t1-t4)比B
的生命周期(t2-t3)要长的多,当B不再在应用中被使用,A仍然持有对B的引用。这样一来,垃圾回收机制不能从内存中移
除B。这很有可能导致内存溢出问题,因为如果其他很多对象像A一样,那么内存中将会有很多不能被回收的对象,这将消耗
大量内存空间。
评论0
最新资源