浅入java虚拟机之垃圾回收篇(四)

这篇主要聊各种垃圾收集器

一、什么是垃圾收集器
垃圾收集器是内存回收的具体实现。java虚拟机规范中对垃圾收集器应该如何实现没有任何规定,因此不同厂商、不同版本的虚拟机所提供的垃圾收集器都可能有很大的差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的垃圾收集器。下图为HotSpot虚拟机的垃圾收集器
这里写图片描述

如上图,总共有7中作用于不同分代的垃圾收集器,两个垃圾收集器之间存在连线,就说明它们可以搭配使用。将上下分为新生代与老年代,收集器所在区域则表示它是哪个分代的收集器。

二、各种垃圾收集器
1.Serial收集器
Serial收集器是最基本,发展历史最悠久的收集器。是一个单线程的收集器,在进行垃圾收集器时,必须暂停其他所有工作线程,直到垃圾收集结束(下文简称“Stop The World”)。
优点:简单而高效,没有切换线程的开销(常运行在client模式下的虚拟机)
2.ParNew收集器
ParNew收集器时Serial收集器的多线程版本。除了使用多条线程进行垃圾收集之外,其余行为包括Serial控制参数、收集算法、Stop The World、对象分配原则、回收策略等都与Serial收集器相同。
是许多运行在Server模式下的虚拟机中首选的新生代收集器,最重要的原因是,除了Serial收集器外,只有它能与CMS收集器配合工作。
ParNew收集器在单CPU的环境中绝对不会比Serial收集器的效率高,甚至由于线程切换的开销,在两个CPU的环境中都不能百分百保证可以超越Serial。当然随着可使用的CPU的数量的增加,它对于GC时系统资源的有效利用还是很有好处的。
3.Parallel Scavenge
Parallel Scavenge收集器目的是达到一个可控制的吞吐量。

ps:吞吐量就是CPU用于运行用地代码的时间与CPU总消耗的时间的比值(运行用户代码的时间/(运行用户代码的时间+垃圾收集时间))
适用于需要与用户交互的程序,良好的响应速度能提升用户体验,高吞吐量可以高效率的利用CPU时间。

4.Serial Old收集器
是Serial 的老年代版本。它同样是一个单线程的收集器,主要意义是给client模式下的虚拟机使用。jdk1.5及以前的版本中与ParallelScavenge收集器搭配使用,另一种用途就是CMS收集器的后备预案。

5.Parallel Old收集器
是ParallelScavenge收集器的老年代版本

6.CMS收集器
CMS(Concurrent Mark Sweep)收集器时一种以获取最短回收停顿时间为目标的并发收集器。响应速度快 、系统停顿时间最短。

7.G1收集器
G1(Garbage-first)是一款面向服务端应用的垃圾收集器。具有如下特点
(1)并发与并行:能充分利用多CPU、多核环境下的硬件优势,缩短Stop The World停顿的时间。
(2)分代收集:独立管理整个GC堆,保留分代概念。
(3)空间整合:基于“标记–整理”算法,运作期间不会产生内存空间碎片,收集后可以提供规整可用的内存。
(4)可预测停顿:建立可预测的停顿时间模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值