可回收判定两种算法
引用计数法(Reference Counting):引用为0时可回收。
可达性分析法(Reachability Analysis): 从GCRoots对象到这个对象不可达。
GCRoots:
- 本地变量表引用的对象;
- 方法区中静态属性引用的对象
- 方法区中常量引用的对象
- Native方法栈引用的对象。
个人理解,即在生命周期内不会变得不可达的对象。
垃圾收集算法
复制算法,一般用于新生代的minor gc,效率较高;
标记-整理算法,用于老年代的full gc,效率较低。
梳理对象的生命周期:
- 在新生代 Eden区和一个Survivor区(from survivor)分配内存
- 标记可回收对象
- 将存活对象复制到另一个Survivor区(to survivor),不够用则将存活周期较长的对象复制到老年代
- 清空Eden区和from survivor区(minor gc)
- 如果在写老年代时,发现老年代不够用,则触发一次full gc
《深入理解java虚拟机》读书笔记——垃圾收集与内存分配策略
原文:https://www.cnblogs.com/night1989/p/jvm.html