-
为什么要进行垃圾回收?
创建的对象没用时也不进行回收的话,堆内存很快就会被消耗殆尽,所以需要把一些没有用的对象清理掉。
-
JVM GC 分为哪几种?
分为三种,对新生代进行的垃圾回收叫 minor GC,也叫YGC;对老年代进行的垃圾回收叫 major GC;同时对新生代和老年代进行的垃圾回收叫 full GC,简称 FGC。
-
如何判断一个对象是否可以被回收?
有两种方法判断对象是否可回收,引用计数法和可达性分析算法。
引用计数法就是维护一个计数器,有引用指向对象时就加一,引用失效时就减一,引用为零就可以被回收。主流的 JVM 并没有采用这种方式,因为很难解决循环引用问题;
可达性分析算法是通过一系列 GC Roots 根节点集作为起始节点,从这些节点根据引用关系向下搜索,搜索过程中经过的路径称为引用链。如果一个对象到 GC Roots 之间没有任何引用链,那么这个对象就称为不可达,就可以被回收。主流 JVM 采用的就是这种方式。
-
哪些对象可以当作 GC Roots?
系统类对象,也就是 jdk 自带的类的对象;
native 方法引用的对象;
活动线程正在引用的对象;
正用于加锁的锁对象。 -
不可达的对象会被立即回收吗?
不会,一个对象至少要两次判断为不可达才会进行回收,如果第一次判断为不可达,第二次又可达,那这个对象就会复活。
-
确定一个对象是要被回收的,那接下来如何怎么处理&