JVM垃圾回收算法和垃圾收集器笔记

概述

程序计数器,本地方法栈,虚拟机栈随线程而生,随线程而灭. Java堆和方法区则不一样,这部分内存分配和回收的都是动态的,垃圾收集器所关注的是这部分内存.

判断对象是否是垃圾的算法

JVM没有选用引用计数算法来管理内存,最主要的是引用计数很难解决对象之间相互循环引用的问题.JVM采用了可达性分析算法来判断对象是否能回收.用GC Roots对象作为起点,向下搜索,搜索走过的路劲称为引用链(reference chain),当对一个对象到GC Roots没有任何引用链时,则证明对象不可用的.

判定对象死亡

判定一个对象是否死亡,至少要经历2次标记.如果GC时,经过可达行分析对象不可用,将标记第一次并且进行第一次筛选,筛选条件是对象的finaliz()方法被覆盖且没有执行过.然后放入F-Queue队列中.第二次标记是对F-Queue队列,看对象是否在finalize()方法中拯救自己,否则进行回收.任何对象的finalize()方法都只会被系统自动调用一次,强烈不推荐使用finalize()方法.

垃圾回收算法

标记-清除算法 最基础的算法,其它算法是对它的完善和补充

复制算法 现在虚拟机都采用这种收集算法来回收新生代.

标记-整理算法 也可称标记-压缩算法.回收老年代采用了这种算法.

HotSpot的算法实现垃圾收集器Serial收集器

Serial垃圾收集器是最基本,历史最悠久的收集器. 单线程GC,回收时”Stop the world”.采用复制算法. 对于运行Client模式下的虚拟机来说是一个不错的选择.

Serial Old收集器

Serial Old收集器是Serial的老年代版本.采用标记-整理算法.

ParNew收集器

Serial垃圾收集器 对于运行Server模式下的虚拟机来说是一个不错的选择.

Parallel Scavenge收集器

Parallel Scavenge收集器是新生代收集器,它采用复杂算法收集,又是并行的多线程收集器. Parallel Scavenge收集器最主要目的是达到一个可控制的吞吐量.吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)

Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和”标记-整理”算法.

CMS收集器

CMS(Concurrent Mark Sweep)收集器是以一种获取最短回收停顿时间为目标的收集器.

4个步骤 – 初始标记(Stop the world) – 并发标记 – 重新标记(Stop the world) – 并发清除

G1收集器

并行和并发,分代收集,空间整合,可预测停顿.最前沿技术.

,只知道心痛得滴血,都只为你。

JVM垃圾回收算法和垃圾收集器笔记

相关文章:

你感兴趣的文章:

标签云: