JVM简单整理

垃圾回收算法:

一.引用计数法

二.可达性算法:从GC根节点开始搜索GCRoot无法到达的对象为垃圾对象。

可作为GCRoot引用点的是:

 (1)JavaStack中引用的对象 ;

 (2)方法区中静态引用指向的对象;

 (3)方法区中常量引用指向的对象;

 (4)Native方法中JNI引用的对象;

1.复制算法(对于Survivor区 S0,S1)以空间为代价,没有碎片

2.标记---清除法  缺点:产生大量不连续的碎片

3.标记---整理算法

根据老年代特点出的一种标记算法,标记过程仍与“标记清除”算法一样,但后续步骤不是直接回收对象,而是让所有存活的对象向一端移动,然后直接清除掉端边界以外的内存。 

4.分代收集算法

根据堆中划分为不同的区域,以其各自特点选择合适的算法。

==========================分割线============================================

垃圾收集器

 

Serial:串行收集器,单线程 

 ParNew:为Serial的多线程版本,除使用多线程外,其余(控制参数,收集算法,回收策略等)均与Serial一致,多核情况下优势明显。

默认为新生代收集器

Parallel Scavenge:是一款新生代收集器,使用复制算法,该收集器关注的是一个可控的吞吐量,被称为:“吞吐量优先”收集器。

吞吐量:CPU运行用户代码的时间与CPU总耗时的比值,即:

Parallel Scavenge提供了2个参数控制吞吐量:

-XX:MaxGCPauseMillis 最大垃圾收集停顿时间

-XX:GCTimeRatio          直接设置吞吐量

ParallelScavenge还提供了一个参数:-XX:+UseAdaptiveSizePolicy

这是一个开关参数,当这个开关打开后就不用手动指定新生代大小(-Xmn),Eden,Survivor区比例(-XX:SurvivorRatio),晋升老年代对象年龄(-XX:PretenureSizeThreshold)等参数,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种机制叫作:GC自适应调节策略(GC Ergonomics)。

注:如对收集器运作不太了解,手工优化存在困难的时候,使用ParallelScavenge收集器配合自适应调节策略,只需设置好基本的内存参数:如-XX:Xmx设置最大堆 ,然后使用MaxGCPauseMillis参数设置对大停顿时间,或者GCTimeRatio设置吞吐量给VM设立一个优化目标,具体细节参数调整的工作由虚拟机完成。

自适应调节策略也是ParallelScavenge收集器和ParNew收集器的一个重要区别。

CMS:(Concurrent Mark Sweep)CMS收集器是一种以收获最短回收停顿时间为目标的收集器,非常适合于B/S系统这种重视服务的响应速度,希望系统停顿时间最短的系统中。

基于“标记清除”算法,整个过程分为4个步骤:

1.初始标记(CMS initial mark)STW

2.并发标记(CMS concurrent mark)

3.重新标记(CMS remark)STW

4.并发清除(CMS concurrent sweep)

优点并发收集,低停顿  。

缺点占用大量CPU资源,无法处理浮动垃圾,出现concurrent Mode Failure空间碎片。

G1:G1收集器,

优势:并发和并行,

分代收集

空间整合:从整体看是基于“标记整理”算法实现,不产生空间碎片。

可预测停顿:相对于CMS,G1降低了停顿时间,同时还建立可预测停顿时间模型,G1将Java堆划分为多个大小相等的独立区域(Region),虽然保留着新生代和老年代的概念,但是新生代和老年代不再是物理隔离,它们都是一部分Region(不需要连续)的集合。(化整为零)

===============================分割线======================================

垃圾收集器搭配

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章