垃圾回收机制
a.垃圾回收是由垃圾收集器自动执行的
b.程序员只能通过System.gc方法来建议执行,无法确保是否执行和何时执行。
c.jvm调优无法提高程序的运行效率,它真正的目的是减少GC回收的次数,让系统更多的时间是去处理用户的请求
核心思想:堆内存中对象没有任何引用
finalize方法作用
finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。
它是Object类中的,所有子方法均可以覆盖。
但垃圾回收的时候注意finalize必须是跟着对应的对象。
//1. 直接用new对象,未复制变量时,则调用System.gc()可能会执行垃圾回收,finalize()内容也可能会执行
new FinalizeTest2();
System.gc();
//2. 复制给变量后,就算调用了System.gc(),finalize()内容也肯定不会执行
FinalizeTest2 fs = new FinalizeTest2();
System.gc();
// 3.当引用对象置为空的时候,调用System.gc()可能会执行垃圾回收,但加了System.runFinalization();就一定会执行
FinalizeTest2 fs = new FinalizeTest2();
fs = null;
System.gc();
System.runFinalization();
@Override
public void finalize(){
System.out.println("垃圾清理前的操作");
}
public static void main(String[] args){
//这里要用new FinalizeTest();要不然finalize无法执行到,因为finalize是属于FinalizeTest类的
Object obj = new Object();
// FinalizeTest obj = new FinalizeTest();
obj = null;
System.gc();
}
@Override
public void finalize(){
System.out.println("垃圾清理前的操作");
}
网友评论