1、因为代码中给对象实例设置为null值,或者在代码运行一段时间后,没有再给当前实例完成相应实例化。这样,引用的实例会越来越多,最终实例占据的内存空间超过内存的容量,导致内存溢出。
2、如果有栈区实例引用在一段时间以后,没有通过new关键字在堆区开辟实际的空间存放数据,JVM会自动从内存中回收栈区的引用。
垃圾回收机制的缺点:效率低下。
例:
// Person.java
package test;
public class Person {
// 垃圾回收时,会调用finalize()方法
@Override
protected void finalize() throws Throwable {
System.out.println ("垃圾回收");
}
}
// TestGC.java
package test;
public class TestGC {
public static void main(String[] args) {
new Person();
System.gc();
}
}
运行结果