JavaGC概叙

什么是垃圾回收机制

在java程序运行时,我们有普通线程和守护线程,其中的守护线程就是我们说的垃圾回收机制,GC。
GC是干嘛的呢?
我们知道,在java中,我们创建的对象储存在堆空间中,栈空间的变量只是存储对象的引用,而当一个对象没有任何引用之时,GC将会在适当的时间将他销毁,并且回收对象占用的空间,分配给下一个对象,且相应的碎片空间,也会由JVM整合继续分配。
不过,这个适当的时间不是我们能掌握的。
他可能是在堆空间的某个区放满之时,也可能在CPU空闲的时候。
虽然,我们可以通过Runtime对象的gc()方法或System.gc()方法,来建议回收,但也仅仅是建议。
因此,我们比较少提到的finalize,运用的挺少。
说到这里,finalize又是什么呢?
finalize是Object类的一个方法,我们可以让我们的对象,重写该方法。
然后,在GC要回收这个对象的时候,执行finalize写的程序。(finalize不在这里细说了)

垃圾回收机制能干嘛呢

我们知道,堆空间的内存是有限的,你创建了一堆废对象,又不去回收,不去释放,最后导致系统运行效率下降。
因此,在c和cpp中,我们是被要求必须自己释放相关资源的。(比如malloc的指针)
不过,在java里面,有垃圾回收机制,我们完全不需要这么做,JVM会帮我们做好这一切。
因此,GC大大提高了我们的编程效率。
但是,得到这个特性我们也付出代价。
他会影响我们的性能,JVM虚拟机必须跟中程序中有用的对象,才可以确定哪些对象是无用的对象,并最终释放这些无用的对象,这个过程是需要花费处理器时间的。

垃圾回收器的特点

1.工作目标是回收无用的对象,对于IO,SQL资源的关闭没有办法。
2.可以通过把指向该对象的变量设为null来暗示JVM回收。
3.不可预知,不知道什么时候能发生,哪怕你对他做出了建议。
4.不同的JVM有不同的垃圾回收算法。

猜你喜欢

转载自blog.csdn.net/gggggym/article/details/121863738