栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中常见的垃圾收集器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中常见的垃圾收集器

串行垃圾回收器(Serial 收集器)

单线程的垃圾回收器,在垃圾回收时,需要其它线程暂停,等待垃圾回收完毕。

开启串行垃圾回收器的参数:-XX:+UseSerialGC = serial + serialOld

serial是工作在新生代,采用的是复制算法;

serialOld是工作在老年代,采用的是标记整理算法。

缺点:STW时间较长

优点:简单又高效,没有线程交互的消耗,收集效率高。

吞吐量优先垃圾回收器

多线程的垃圾回收器,注重的是单位时间内垃圾回收的STW时间最短。需要多核CPU支持,是和在服务器中 使用。

开启吞吐量优先垃圾回收器的参数:-XX:+Use Parallel GC ~ -XX:+Use Parallel Old GC

(Parallel:并行的)在JDK8是默认开启了这两个开关。当你手动开启其中一个开关,另一个也会默认开启。

ParallelGC 是工作在新生代,采用的是复制算法;

ParallelOldGC 是工作在老年代,采用的是标记整理算法。

优点:单位STW时间较短

缺点:垃圾回收时,CPU占用率过高

响应时间优先垃圾回收器

多线程的的垃圾回收器,注重的是尽可能让单次垃圾回收中STW的时间最短,在垃圾回收时,不需要其它线程暂停,可以和其它用户线程并发(concurrent)执行是多个线程和垃圾回收线程抢占CPU。

开启响应时间优先垃圾回收器的参数:-XX: +UseConcMarkSweepGC~-XX: +UseParNewGC~ Serial0ld

CMS GC是工作在老年代的,使用标记清除算法的GC。

PN GC是工作在新生代的,使用复制算法的GC

优点:并发收集、低停顿

缺点:垃圾回收占用了一整个线程,整个程序的吞吐量降低。会产生内存碎片。

**CMS垃圾回收器的工作步骤:**暂停两次,标记三次

初始标记: 暂停所有的其他线程,并记录下直接与 root 相连的对象,速度很快 ;

并发标记: 同时开启 GC 和用户线程,跟踪记录发生引用更新的对象。

重新标记: 重新标记产生变化的那部分对象。

并发清除: 线程恢复运行,并发清理每个线程的垃圾。

G1(Garbage First)收集器

G1 (Garbage-First) 是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 同时注重吞吐量(Throughput) 和低延迟(Low latency) .

整体上是标记+整理算法,两个区域之间是使用复制算法

超大堆内存,会将堆划分为多个大小相等的区域Region(每个区都有自己新生代和老年代)

开启G1垃圾回收器的参数:- XX: +UseG1GC 在JDK9之前需要手动启用G1回收

初始标记:在Young GC时会进行GC Root的初始标记

并发标记:老年代占用堆空间比例达到阈值时,进行并发标记(不会STW),JVM参数决定

-XX:InitiatingHeapOccupancyPercent = percent (默认45%)

最终标记:对E、S、O区域进行全面垃圾回收,会STW

筛选回收:

具体的回收步骤:

将E区和S区的无用对象进行回收,有用对象进行复制算法到一个新的S区。

将符合晋升阈值的对象加入到老年代中。

当现有的O区中内存已满,就会根据暂停时间,在暂停时间内,有选择的将O区中的对象复制到新的O区中。(优先回收能释放出更多内存的区域,所以叫做Garbage First)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号