jvm中垃圾收集器

垃圾分代

Minor GC/scavengeGC次收集 Major GC/Full GC全收集

  • 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java 对象大多都具 备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。    

  • 老年代 GC(Major GC / Full GC):指发生在老年代的 GC,出现了 Major GC,经常会伴随至少一次的 Minor GC(但非绝对的,在 ParallelScavenge 收集器的收集策略里就有直接进行 Major GC 的策略选择过程) 。MajorGC 的速度一般会比 Minor GC 慢 10倍以上。

    使用system.gc()方法 (建议性开启主GC模式,但不一定开启)

    运行时间一般不会超过3-5秒的;

 

七个收集器:

         上边是年轻代收集器 下边是老年代收集器,黑线G1是兼容性的收集器 可在年轻代与老年代同时使用它,他的蓝色连线表示年轻代与老年代可进行匹配的收集器;

               

新生代收集器:

串行收集器:Serial

他是在Hotspot在client模式下的默认银生代收集器,他的特点只用 一个cpu/一条收藏线程去完成GC工作,且在进行垃圾回收时必须暂停 所有的工作线程(stop The Word 简称stw)可以使用 -xx:+UseSerlalGC更换

简单高效,vm管理内存不大的情况向下收集几十到一两百兆的新生 代,停顿时间可以控制在几十毫秒-一百多毫秒内

                 

并行收集器:ParNew

他是serial的多线程版本,除使用多条线程进行gc处理外,包括 serial可用的所有控制参数,收集算法,stw,对象分配规则,回收策 略等都与serial完全一样(他也是vm启用cms收集器的默认新生代 :- xx:+UseConcMarkSweepGC)

由于单线程切换的开销,parNew在但CPU的环境中比不上serial, 且在通过超线程技术实现的两个CPU的环境中也不能100%保证能超越 serial,但是可用的cpu数量的增加,收集效率也会大大增加(- xx:+parallelGCThreads=<N>)

           

 

parallel收集器:并行

Parallel Scavenge垃圾收集器因为与吞吐量关系密切,也称为吞吐 量收集器(Throughput Collector)。多线程 复制算法:

系统吞吐量=运行用户代码时间/(运行用户代码时间+垃圾回收时间)

停顿时间越短越有利于用户交互,而高吞吐量则适合后台运算不需 要太多交互的任务,可以尽快的完成运算任务。

老年代收集器:

 serial old收集器:

采用"标记-整理"算法(还有压缩,Mark-Sweep-Compact) 单线程收集;

应用场景

主要用于Client模式;

而在Server模式有两大用途:

(A)、在JDK1.5及之前,与Parallel Scavenge收集器搭配使用(JDK1.6有Parallel Old收集器可搭配);

(B)、作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用

 

 Parallel Old收集器

Parallel Old垃圾收集器是Parallel Scavenge收集器的老年代版本, JDK1.6中才开始提供; 采用"标记-整理"算法, 多线程收集;

应用场景

JDK1.6及之后用来代替老年代的Serial Old收集器;

特别是在Server模式,多CPU的情况下;

这样在注重吞吐量以及CPU资源敏感的场景,就有了Parallel Scavenge加 Parallel Old收集器的"给力"应用组合;

设置参数:

XX:+UseParallelOldGC:指定使用Parallel Old收集器;

 

CMS收集器 并发

并发标记清理(Concurrent Mark Sweep,CMS)收集器也称为并发低停顿收集器(Concurrent Low Pause Collector)或低延迟(low-latency)垃圾收集器;

基于"标记-清除"算法(不进行压缩操作,产生内存碎片);以获取最短回收停顿时间为目标;并发收集、低停顿; 需要更多的内存(看后面的缺点);

是HotSpot在JDK1.5推出的第一款真正意义上的并发(Concurrent)收集器;

第一次实现了让垃圾收集线程

应用场景

与用户交互较多的场景

希望系统停顿时间最短,注重服务的响应速度;

以给用户带来较好的体验;

常见WEB、B/S系统的服务器上的应用

设置参数

*"-XX:+UseConcMarkSweepGC":*指定使用CMS收集器;

与用户线程(基本上)同时工作;

 

G1收集器:

包括年轻代与老年代的唯一的收集器;1.7才出来的商用的

A)、并行与并发

能充分利用多CPU、多核环境下的硬件优势;

可以并行来缩短"Stop The World"停顿时间;

也可以并发让垃圾收集与用户程序同时进行;

B)、分代收集,收集范围包括新生代和老年代

能独立管理整个GC堆(新生代和老年代),而不需要与其他收集器搭配;

能够采用不同方式处理不同时期的对象;

虽然保留分代概念,但Java堆的内存布局有很大差别;

将整个堆划分为多个大小相等的独立区域(Region);

新生代和老年代不再是物理隔离,它们都是一部分Region(不需要连续)的 集合;

C)结合多种垃圾收集算法,空间整合,不产生碎片

从整体看,是基于标记-整理算法;

从局部(两个Region间)看,是基于复制算法;

这是一种类似火车算法的实现;

都不会产生内存碎片,有利于长时间运行;

D)、可预测的停顿:*低停顿的同时实现高吞吐量*

G1除了追求低停顿处,还能建立可预测的停顿时间模型;

可以明确指定M毫秒时间片内,垃圾收集消耗的时间不超过N毫秒;

应用场景

面向服务端应用,针对具有大内存、多处理器的机器;

 

先到这里---- 后续慢慢给与细化,如有不足之处,欢迎大佬指点。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值