经典的垃圾收集器(一)

 如果说收集算法是内存回收的⽅法论,那么垃圾收集器就是内存回收的具体实现。

Serial 收集器

Serial 收集器是最基础、历史最悠久的收集器,曾经(在JDK 1.3.1之前)是HotSpot虚拟机新时代收集器唯一的选择。是一个单线程工作的收集器。它的 “单线程” 的意义不仅仅意味着它只会使⽤⼀条垃圾收集线程去完成 垃圾收集⼯作,更重要的是它在进⾏垃圾收集⼯作的时候必须暂停其他所有的⼯作线程( "Stop The World" ),直到它收集结束。

新⽣代采⽤复制算法,⽼年代采⽤标记-整理算法。

 迄今为止,Serial 收集器依然是HotSpot虚拟机运行在客户端模式下的默认垃圾收集器,与其他收集器的单线程相比,它简单而高效;对于内存资源受限的环境,它是所有收集器里额外内存消耗(Memory Footprint)最小的;对于单核处理器或者核心数较少的环境来说,Serial 收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。

ParNew 收集器

ParNew 收集器其实就是 Serial 收集器的多线程版本,除了使⽤多线程进⾏垃圾收集外,其余⾏ 为(控制参数、收集算法、回收策略等等)和 Serial 收集器完全⼀样。

新⽣代采⽤复制算法,⽼年代采⽤标记-整理算法。

 它是许多运⾏在 Server 模式下的虚拟机的⾸要选择,除了 Serial 收集器外,只有它能与 CMS 收 集器(真正意义上的并发收集器,后⾯会介绍到)配合⼯作。

并⾏和并发概念补充:

  • 并⾏(Parallel) :指多条垃圾收集线程并⾏⼯作,但此时⽤户线程仍然处于等待状态。
  • 并发(Concurrent):指⽤户线程与垃圾收集线程同时执⾏(但不⼀定是并⾏,可能会交替执⾏),⽤户程序在继续运⾏,⽽垃圾收集器运⾏在另⼀个 CPU 上。

Parallel Scavenge 收集器 

Parallel Scavenge 收集器也是一款新生代收集器,它同样基于标记-复制算法实现的收集器,也是能够并行收集的多线成收集器,它看上去⼏乎和 ParNew 都⼀ 样。 那么它有什么特别之处呢?

Parallel Scavenge 收集器关注点是吞吐量(⾼效率的利⽤ CPU)CMS 等垃圾收集器的关注 点更多的是⽤户线程的停顿时间(提⾼⽤户体验)。所谓吞吐量就是 CPU 中⽤于运⾏⽤户代码 的时间与 CPU 总消耗时间的⽐值。

Parallel Scavenge 收集器提供了很多参数供⽤户找到最合适的停顿时间或最⼤吞吐量,如果对于收集器运作不太了解,⼿⼯优化存在困难的时候,使⽤ Parallel Scavenge 收集器配合⾃适应调节策略,把内存管理优化交给虚拟机去完成也是⼀个不错 的选择。

新⽣代采⽤复制算法,⽼年代采⽤标记-整理算法。

 这是 JDK1.8 默认收集器

使⽤ java -XX:+PrintCommandLineFlags -version 命令查看

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

JDK1.8 默认使⽤的是 Parallel Scavenge + Parallel Old,如果指定了-XX:+UseParallelGC 参 数,则默认指定了-XX:+UseParallelOldGC,可以使⽤-XX:-UseParallelOldGC 来禁⽤该功能

Serial Old 收集器

Serial 收集器的⽼年代版本,它同样是⼀个单线程收集器,使用标记-整理算法

它主要有两⼤⽤途:

  • 在 JDK1.5 以及以前的版本中与 Parallel Scavenge 收集器搭配使⽤,
  • 作为 CMS 收集 器的后备⽅案。

Parallel Old 收集器

Parallel Scavenge 收集器的⽼年代版本。支持多线程并发收集,基于标记-整理算法实现。

在注重吞吐量以及 CPU 资源的场合,都可以优先考虑 Parallel Scavenge 收集器和 Parallel Old 收集器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值