很多人学了很久的java,如果不是因为要面试或者考试什么的,可能对垃圾回收机制是什么根本还不了解。
实际上java的垃圾回收机制大家不要想的太复杂--------------(因为大神在JVM帮你在低层写好了!!)。
因为今天有人问我,我就顺便总结一下,以后大家就注意以下几点就行。
1 java的垃圾回收机制是java的JVM帮我们自动实现了,也就是我们写代码的new出的一些对象不用的时候,java会在特定时候自动清除它们
执行finalize()方法。
2 我们也可以手动清除,既在程序最后调用System.gc()方法 (!!该方法只是建议java赶紧回收,具体还有看JVM,不一定马上回收),当JVM回收的时候就会调用执行finalize()方法。 这就是System.gc()和finalize()方法。
3 低层jvm的算法大概有4-5种,每种方法适合不同场景,这里不深入,有兴趣大家可以搜一下,引用计数,标记清楚法,复制清除,标记整理算法,分代收集算法,有兴趣可以研究。
附上个人写的简单demo给大家参考理解
public class Obj {
private String objName;
public Obj(String objName) {
this.objName = objName;
System.out.println(objName+"被创造出来了");
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println(objName+" 被垃圾回收了");
}
}
public class Test {
public static void main(String args[]) {
Obj obj1 = new Obj("obj1");
Obj obj2 = new Obj("obj2");
obj1 = obj2 = null;
System.gc();
}
}
程序结果是
obj1被创造出来了
obj2被创造出来了 //在运行System.gc();之前
//运行System.gc();之后
obj1被垃圾回收了
obj2被垃圾回收了
相信大家已经有所认识了
简单的说 JVM自动帮我们回收了多余的对象之类垃圾,释放内存。 也可以手动通过调用System.gc()的方法释放。