-
对象存活判定的方法
● 引用计数法
● 可达性分析法
-
引用计数法,现在主流的Java垃圾回收都不使用,原因是它很难解决循环引用的问题
-
可达性分析法,涉及到一个GC Roots,如果一个对象和GC Roots 没有任何引用链(不可达),则证明是可以被垃圾回收的
-
无论是引用计数法还是可达性分析法,都涉及到对象的引用问题
-
对象的引用可分为4类,强引用、软引用、弱引用、虚引用
-
可以被垃圾回收的对象,并不一定会被立即回收(死亡)
-
垃圾回收器会将不可达的对象进行标记,同时进行一次筛选,将那些可以执行finalize() 方法的对象放入一个队列中等待执行finalize() 方法
-
可以执行finalize()方法的对象是,实现了finalize,同时没有执行过 finalize()方法的对象
-
finalize() 方法会被虚拟机的一条低优先级的线程触发执行,但是不保证一定会执行完成
-
方法区也会被垃圾回收
-
方法区的垃圾回收主要涉及2部分,一是不再使用的常量,二是不再使用的对象类型信息