继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JVM学习笔记(6)---垃圾收集器

幕布斯6054654
关注TA
已关注
手记 1264
粉丝 219
获赞 1011

垃圾收集算法 是内存回收的 方法垃圾收集器 则是内存回收的 实现
收集器没有最好的没有万能的,只有最合适的。

webp

垃圾收集器


图中展示了JDK8之后,HotSpot所有虚拟机的收集器:


  • 7种不同分代的收集器:
    新生代收集器: Serial、ParNew、Parallel Scavenge
    老年代收集器: CMS、Serial Old、Parallel Old
    整堆收集器: G1

  • 两个收集器间有连线,表明可以搭配使用

Minor GC与 Full GC

Minor GC又称为新生代GC
因为新生代对象大多朝生夕灭,所以Minor GC发生频繁,回收速度快
Full GC/Major GC又称为老年代GC
发生经常会伴随至少依次Minor GC。回收速度慢,比Minor GC慢10倍以上

Serial收集器

Serial收集器是最基本、发展历史最悠久的收集器。

webp

Serial收集器工作流程


特点:


  • 针对新生代

  • 采用复制算法

  • 单线程收集器,GC时暂停所有其他工作线程Stop The World,“都给我停!”)

优点: 简单而高效(与其他单线程收集器相比)

  • 对于限定单个CPU的环境来说,Serial收集器没有线程交互(切换)开销,可以获得最高的单线程收集效率

  • 在桌面应用场景下,分配给虚拟机的内存不大,收集几十兆新生代内存可控制在几十毫秒内,停顿可以接受

缺点: 停顿导致用户体验差
应用: 是HotSpot在Client模式下的默认的新生代收集器。
参数:
+XX:+UseSerialGC:使用串行收集器。

ParNew收集器

ParNew收集器是Serial收集器的多线程版本。

webp

ParNew收集器工作流程


特点:


  • 针对新生代

  • 采用复制算法

  • 多线程并行

  • 与Serial共有了很多代码,行为、特点和Serial收集器一样

并行(Parallel)并发(Concurrent)
并行:多条垃圾收集线程同时工作,用户线程处于等待。如ParNew、Parallel Scavenge、Parallel Old。
并发:用户线程与垃圾收集线程同时执行(不一定并行,可能交替执行),用户程序在继续运行,而垃圾收集程序运行在另一个CPU上。如CMS、G1。

应用:
虚拟机在Server模式下的首选收集器。
因为除Serial外,只有ParNew收集器可以和CMS配合工作

因为Parallel Scavenge收集器以及G1收集器没有使用传统GC收集器代码框架,而是独立实现。而CMS与ParNew等其余收集器则共用部分框架代码

参数:
"-XX:+UseConcMarkSweepGC":指定使用CMS后,会默认使用ParNew作为新生代收集器。
"-XX:+UseParNewGC":强制使用ParNew。
"-XX:ParallelGCThreads":并行线程数量。

Parallel Scanvenge收集器

Parallel Scavenge收集器也被称为 “吞吐量优先” 收集器。

webp

Parallel Scavenge收集器工作流程


特点:

  • 针对新生代

  • 采用复制算法

  • 多线程并行

  • GC时目标为达到一个可控制的吞吐量(Throughput)

吞吐量 = 用户代码运行时间 / ( 用户代码运行时间 + 垃圾收集时间 )
高吞吐量可以高效利用CPU时间,尽快完成程序运算,主要适合在后台运算而不需要太多交互的任务。

参数:
"-XX:MaxGCPauseMillis":设置最大GC停顿时间。数值越小,GC越频繁,吞吐量越小。
"-XX:GCTimeRatio":设置GC占总时间的比率。默认GC时间权重为1,参数设定用户代码运行时间权重n。吞吐量计算方式为 n / (1 + n)。
"-XX:UseAdaptiveSizePolicy":动态调节新老生代参数,以提供合适的停顿时间或最大吞吐量。即GC自适应调节策略

Serial Old收集器

Serial Old收集器是Serial收集器的老年代版本。

webp

Serial Old收集器工作流程


特点:

  • 针对老年代

  • 采用”标记-整理“算法(Mark-Compact)

  • 单线程收集

应用:
主要用于Client模式
Server模式下,JDK1.5之前,用于搭配Parallel Scavenge使用;作为CMS的后备,在并发收集发生Concurrent Mode Failure时使用。

Parallel Old收集器

Parallel Old垃圾收集器是Parallel Scavenge收集器的老年代版本。

webp



作者:weberweber
链接:https://www.jianshu.com/p/c5c04a7f103c


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP