物理分代垃圾回收器

内存结构

内存分配

  • 堆上分配
    大多数情况在eden【年轻代中的一个区域】上分配,偶尔会直接在old【老年代】上分配,细节取决于GC的实现。
  • 栈上分配(发生了指针逃逸,又叫指针逃逸分析——JVM优化)
    原子类型的局部变量。

GC

1、在物理分代模型上,GC 从思想上分为 Young GC 和 Full GC,从实现上分为 Minor  GC、Major GC。

【注:】方法区的数据是类信息,常量池什么的,而Young、Old是对象信息

2、Young GC(通过 Minor GC 具体实现)

  • 触发时机:Eden空间满了。
  • 大多数对象会在此被回收,使用复制算法的执行效率高,无碎片,时间段。
  • 但是执行时STW

3、Full GC (尽量避免,通过 Minor GC + Major GC 组合具体实现)

  • 对整个JVM的 Young、Old、【Perm】进行整理
  • 主要的触发时机:
    • Old满了;
    • Perm/MetaSpace满了;
    • system.gc()
  • 效率很低,尽量减少Full GC。

垃圾回收器(Garbage Collector)

  • 分代模型:GC的宏观愿景。
  • 垃圾回收器:GC的具体实现。
  • Hotspot JVM提供多种垃圾回收器,我们需要根据具体应用的需要采用不同的回收器。
  • 没有万能的垃圾回收器,每种垃圾回收器都有自己的适用场景。

垃圾收集器的“并行”和“并发”

  • 并行(Parallel):指多个收集器的线程同时工作,但是用户线程处于等待状态。
  • 并发(Concurrent):指收集器在工作时同时,可以允许用户线程工作。
    并发不代表解决了GC停顿的问题,在关键的步骤还是要停顿。比如在收集器标记垃圾的时候。但在清除垃圾的时候,用户线程可以和GC线程并发执行。 

Serial收集器

  • 单线程收集器,收集时会暂停所有工作线程(Stop The World,简单STW),使用复制收集算法,虚拟机运行在Client模式时的默认新生代会采用此收集器。
  • 最早的收集器,单线程进行GC。
  • New和Old Generation都可以使用。
  • 在新生代,采用复制算法:在老年代,采用Mark-Compact算法。
  • 因为是单线程GC,没有多线程切换的额外开销,简单实用。
  • Hotspot Client模式缺省的的收集器

    如图中出现了一个词:“Safepoint”,安全点,在之后会举具体的实例来说明安全点的作用。

ParNew收集器

  • ParNew收集器就是Serial的多线程版本,除了使用多个收集线程外,其余行为包括算法、STW、对象分配规则、回收策略等都与Serial收集器一模一样。
  • 对应的这种收集器是虚拟机运行在Server模式的默认新生代收集器,在单CPU的环境中,ParNew收集器并不会比Serial收集器有更好的效果。
  • Serial收集器在新生代的多线程版本。
  • 使用复制算法(因为针对新生代)。
  • 只有在多CPU的环境下,效率才会比Serial收集器高。
  • 可以通过-XX:ParallelGCThreads来控制GC线程数的多少。需要结合具体CPU的个数。
  • Server模式下新生代的缺省收集器。

Parallel Scavenge收集器

  •  Parallel Scavenge收集器也是一个多线程收集器,也是使用复制算法,但它的对象分配规则与回收策略都与ParNew收集器有所不同,它是以吞吐量最大化(既GC时间占总运行时间最小)为目标的收集器实现,它允许较长时间的STW换取总吞吐量最大化。

Serial Old收集器

  •  Serial Old是单线程收集器,使用标记-整理算法,是老年代的收集器。

Parallel Old收集器

  • 老年代版本吞吐量优先收集器,使用多线程和标记一整理算法,JVM1.6提供,在此之前,新生代使用了PS收集器的话,老年代除Serial Old外别无选择,因为PS无法与CMS收集器配合工作。【了解既可】
  • Parallel Scavenge在老年代的实现
  • 在JVM1.6才出现Parallel Old
  • 采用多线程,Mark-Compact算法
  • 更注重吞吐量
  • Parallel Scavenge + Parallel Old = 高吞吐量,但GC停顿可能不理想

GC垃圾收集器的JVM参数定义

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值