什么是垃圾回收机制
不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来”建议”执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。这也是垃圾收集器的最主要的缺点。当然相对于它给程序员带来的巨大方便性而言,这个缺点是瑕不掩瑜的。
C语言是需要手动申请内存 手动释放内存的
Java是自动的
不可达对象:对象没有被引用或者对象没有存活
finalize() 垃圾回收之前 会执行的方法 是Object里面的
package jvmTest; public class test01 { //没有继续被引用 没有存活 没有被继续使用 public static void main(String[] args) { Object object = new test01(); //这种是可以到达的 object=null; //表示不可达对象 提示jvm回收 System.gc(); } @Override protected void finalize() throws Throwable { System.out.println("垃圾收集开始执行此方法了"); } }
注意 finalize是Object里面的所以 new 的对象也是 Test01的
Sysout.gc( ) 提示gc进行回收垃圾 但是不代表里立即回收
GC线程是守护线程 垃圾回收不定时去回收不可达对象 (通过算法判断是不可达,强制标识null时候那直接就是了) gc线程不定时的回收垃圾
finalize方法作用
Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/16194.html