垃圾回收:即在堆(head)内存中为创建的实例或者对象分配的内存区没有被任何变量引用时 ,这块内存就会变成垃圾,等待垃圾回收机制进行回收。
基本特征有:1.只负责回收堆内存中的对象,不会回收任何物理资源(数据库连接和网络IO资源)
2.程序无法精确控制垃圾回收机制的进行,垃圾回收会在合适的时候进行。回收的垃圾就是无引用的对象内存。
3.垃圾回收机制回收对象之前。都会调用它的finalize()方法,该方法可能使对象复活,(即让一个引用变量重新引用该对象)从而导致垃圾回收机制取消。
如上图,
finalize()方法是在垃圾回收对象之前调用的。可以使对象从可恢复状态(--失去引用的对象或者实例都可以称为到了这个状态)到可达状态(---对象有一个或者多个对应的引用变量,通过引用变量可以调用该对象或实例的方法)。可以称为复活。
不可达状态:(--finalize方法后依然没有任何引用变量指向的对象或者实例)垃圾回收机制一般回收的实例或者对象都是不可达状态的
public class StatusTranfer { public static void test(){ String a =new String ("轻量级javaEE企业实战"); //上述代码执行后"轻量级javaEE企业实战"的字符串对象是可达状态的 a=new String("疯狂java讲义"); //代码执行到此之后,"疯狂java讲义"的字符串对象是可达状态的,而"轻量级javaEE企业实战"的字符串对象是可恢复状态 } public static void main (String args[]){ test(); } } //这个例子a是方法中的局部变量引用,有可能对象也会被其他类的类变量引用,此时同理,该类被销毁后,对象才会进入可恢复状态 //也可能被其他对象的实例变量引用,只有该对象被销毁后,才会进入可恢复状态。