垃圾回收

程序计数器、虚拟机栈、本地方法栈,跟随线程销毁

垃圾回收针对堆、方法区,JDK8之后永久代被取消,主要针对堆

哪些对象需要回收

通过可达性分析算法,判断对象是否存活

可达性分析算法

从根对象GC roots出发向下枚举,和枚举对象没有任何关联的对象,判定为不可达对象

GC ROOT对象

1、虚拟机栈中引用的对象,栈帧中的本地变量表

2、方法区中静态属性引用的对象

3、方法区中常量引用的对象

4、本地方法栈中引用的对象

分代理论

新生代,Minor GC

老年代,Major GC,每次回收后存活的少量对象,晋升老年代

对象年龄,熬过垃圾回收的次数

回收算法

1、标记-清除算法

2、标记-复制算法

3、标记-整理算法

回收时机

新生代按8:1:1分为1个Eden、2个Survivor

优先选择Eden和其中一个Survivor,当这2个区域要满时,则进行新生代垃圾回收,

将存活的对象复制到另一个Survivor中,对象年龄满16,复制到老年代,-XX:MaxTenuringThreshold

大对象直接分配到老年代,如长字符串、大数组,-XX:PretenureSizeThreshold

浙ICP备11005866号-12