OpenJDK垃圾收集器与内存分配策略
确定回收目标的方法
- 引用计数算法
- 可达性分析算法
1.基本思想:通过一系列的称为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。
2.Java语言中,可作为GC Roots的对象包括下面几种:
虚拟机栈(栈帧中的变量表)中引用的对象。
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中引用的对象
回收时机
一个对象死亡,至少经历2次标记过程。在可达性分析后没有与GC Roots相链接的引用链,被第一次标记,并被加入F-Queue的队列中,进行第二次标记时,如果目标对象覆盖了finalize()方法且没有执行过,则会执行该方法,如果在finalize()方法中this被关联到GC Roots时则可免于回收,否则被回收。
垃圾收集算法
1.标记-清除算法
2.复制算法
3.标记整理算法
4.分代收集算法
垃圾收集器
1.Serial收集器
- 串行收集器,单线程,
- Client模式下的默认新生代收集器
- 适合单CPU上的简单应用
2.Parallel Scavenge
- 并行的多线程收集器