1.哪些对象是垃圾?
https://baijiahao.baidu.com/s?id=1636852721632353675&wfr=spider&for=pc
为了确定哪些对象是垃圾,jvm为我们提供了一些算法去判定。常见的判断是否存活有两种方法:引用计数法和可达性分析。
1、引用计数法
为每一个创建的对象分配一个引用计数器,用来存储该对象被引用的个数。当该个数为零,意味着没有人再使用这个对象,可以认为“对象死亡”。每当有一个地方去引用它时候,引用计数器就增加1。但是,这种方案存在严重的问题,就是无法检测“循环引用”:当两个对象互相引用,它俩的计数都不为零,因此永远不会被回收。而实际上对于开发者而言,这两个对象已经完全没有用处了。
比如我们都曾经遇到过:两个类相互是对方的成员变量,toString的时候,相互调用。造成循环引用。
因此,Java 里没有采用这样的方案来判定对象的“存活性”。
2、可达性分析
可达性分析基本思路是把所有引用的对象想象成一棵树,从树的根结点 GC Roots 出发,持续遍历找出所有连接的树枝对象,这些对象则被称为“可达”对象,或称“存活”对象。不能到达的则被可回收对象。
2.怎样判断对象是否被回收
通过重写Object类中的finalinalize方法,这个方法在垃圾回收器执行的时候自动调用
3.怎样通知垃圾回收器进行回收
调用system类中的静态方法gc()进行通知