江的福的小本本之垃圾回收(收集)器

垃圾回收器是垃圾回收算法的落地实现,但是还没有一种最好的垃圾回收器,所以现在只能针对应用去选择适合的垃圾回收器,进行分代收集。

四种垃圾回收的方式:Serial、Parallel、CMS、G1

Serial(串行)

串行垃圾收集器,是为单线程环境设计的、使是用一个线程进行垃圾回收,并且回收时,会暂停所有的服务,可想而知,它并不适合服务器环境。

Parallel(并行)

并行是对串行在为了适应服务器的一种提升。本来是一个人清理垃圾,然后现在多个人清理,会使得清理速度成倍的提升。适用于科学计算/大数据处理
两者的对比图:
在这里插入图片描述
不太清楚?再来一张:
在这里插入图片描述

CMS并发垃圾收集

用户线程和垃圾回收线程同时执行(不一定是并行,可能交替执行),不需要停顿用户线程互联网公司大多用它,适用对响应时间有要求的场景。
一边执行程序,一边清理数据。
在这里插入图片描述

G1

将堆内存分割成不同的区域,然后对其并发的进行垃圾回收。
在这里插入图片描述

接下来说说怎样查看默认垃圾收集器,及如何配置

1、查看

 java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=134217728 -XX:MaxHeapSize=2147483648 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC 
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

开始就说了四种垃圾回收的方式,那么再说说java中的垃圾回收器有哪些吧。
推荐大家看jvm垃圾收集(以下图片皆为此处转载) 还有 垃圾收集器

java的gc回收类型主要有7种。
Serial:新生代和老年代都使用串行回收器,新生代使用复制算法,老年代使用标记-整理算法。

在这里插入图片描述
SerialOld:已被废弃。
UseParNewGC:ParNew收集器是Serial收集器的多线程版本,使用这个参数后会在新生代进行并行回收,老年代仍旧使用串行回收。新生代S区仍然使用复制算法。

在这里插入图片描述

Parallel:新生代使用Parallel收集器,老年代使用串行收集器。
ParallelOld:新生代和老年代都使用并行收集器。打印出的GC会带PSYoungGen、ParOldGen关键字
在这里插入图片描述

ConcMarkSweep:并发标记清除,即使用CMS收集器。
在这里插入图片描述
G1:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当然这些都可以通过配置参数,进行使用。

-XX:+UseSerialGC:在新生代和老年代使用串行收集器

-XX:+UseParNewGC:在新生代使用并行收集器

-XX:+UseParallelGC :新生代使用并行回收收集器,更加关注吞吐量

-XX:+UseParallelOldGC:老年代使用并行回收收集器

-XX:ParallelGCThreads:设置用于垃圾回收的线程数

-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器

-XX:ParallelCMSThreads:设定CMS的线程数量

-XX:+UseG1GC:启用G1垃圾回收器

配置

配置参数的格式:它们是XX参数的Boolean类型。
即-XX:+参数
在这里进行配置:
在这里插入图片描述
布尔类型。+为启用
在这里插入图片描述

关于如何选择:
在这里插入图片描述在这里插入图片描述

发布了51 篇原创文章 · 获赞 11 · 访问量 1748

猜你喜欢

转载自blog.csdn.net/weixin_45276914/article/details/105597118