再谈JVM---垃圾回收与算法

如何确定垃圾

在这里插入图片描述

垃圾收集算法

在这里插入图片描述

总结

总结

  • JVM内存中的对象主要被分配到新生代获得Eden区和From区,在少数情况下会被直接分配到老年代。在新生代的Eden区和From取得内存空间不足时会触发一次GC, 该过程被称为MinorGC。
  • 在MinorGC后,在Eden区和From区中存活的对象或被复制到To区,然后Eden区和From区被清理。如果此时在To区无法找到连续的内存空间存储某个对象,则将这个对象直接.存储到老年代。
  • 若ServivorTo区的对象经过一次GC后 仍然存活,则其年龄加1。在默认的情况下,对象在年龄达到15时,将被无情地移到老年代。

Java中的四种引用类型

  • 强引用:把一个对象赋给一个变量时,这个引用变量就是强引用。有强引用对象的一定为可达性状态,所以不会被垃圾回收机制回收。同时他也是造成Java内存泄漏的主要原因。
  • 软引用:通过SoftReference类来实现,如果一个对象只有软引用则系统空间不足时,该对象将被回收。
  • 弱引用:通过WeakReference类来实现,如果一个类只有弱引用则在垃圾回收过程中一定会被回收
  • 虚引用:通过PlantomReference类来实现,他和引用队列联合使用,主要用于跟踪对象和垃圾回收状态

垃圾收集器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Serial垃圾收集器:单线程,复制算法

它是基于复制算法实现的,他是一个单线程收集器,在他进行垃圾收集时,必须暂停其他所有工作线程直到垃圾收集结束Serial垃圾收集器采用了复制算法,简单,高效,对于单CPU运行环境来说,没有线程进行开销,可以获得最高的单线程垃圾收集效率.因此Serial垃圾收集器是Java虚拟机运行在Client模式下的新生代的默认垃圾收集器.

ParNew垃圾收集器:多线程,复制算法

收集垃圾过程中会暂停其他所有工作线程是Java虚拟机运行在Server模式下新生代的默认垃圾回收器.会默认开启与CPU同等数量的线程进行垃圾回收.

Parallel Scavenge垃圾收集器:多线程,复制算法

  • 为了提高新生代垃圾收集效率而设计的,基于多线程复制算法实现,在吞吐量上有很大优化,更高效的利用CPU尽快完成垃圾回收.
  • Parallel Scavenge通过自适应调节策略提供系统的吞吐量,提供了三个参数用于调节、控制垃圾回收的停顿时间及吞吐量,分别是:
    1. 控制最大垃圾收集停顿时间的: -XX :MaxGCPauseMillis
    2. 控制吞吐量大小的: -XX: GCTimeRatio
    3. 控制自适应调节侧率开启与否的:UseAdaptiveSizePolicy参数。

SerialOld垃圾收集器:单线程,标记整理算法

Parallel Old垃圾收集器:多线程,标记整理算法

CMS垃圾收集器

CMS(CurrentMarkSweep)垃圾收集器是位老年代设计的垃圾收集器,其主要的目的是达到最短的垃圾回收停顿时间,基于线程的标记清除算法实现,以便在多线程并发环境下以最短的垃圾收集停顿时间提高系统的稳定性。
垃圾回收过程包含如下几个步骤:

  1. 初始标记:只标记和GC Roots直接关联的对象,速度很快,需要暂停所有工作线程。
  2. 并发标记:和用户线程一起工作,执行GC Roots跟踪标记过程,不需要暂停工作线程。
  3. 重新标记:在并发标记过程中用户线程继续运行,导致在垃圾回收过程中部分对象的状态发生变化。为了确保这部分对象的状态正确性,需要对其重新标记并暂停工作线程。
  4. 并发清除:和用户线程一起工作, 执行清除GC Roots不可达对象的任务,不需要暂停工作线程。

G1垃圾收集器

CMS(CurrentMarkSweep)垃圾收集器是位老年代设计的垃圾收集器,其主要的目的是达到最短的垃圾回收停顿时间,基于线程的标记清除算法实现,以便在多线程并发环境下以最短的垃圾收集停顿时间提高系统的稳定性。
垃圾回收过程包含如下几个步骤:

  1. 初始标记:只标记和GC Roots直接关联的对象,速度很快,需要暂停所有工作线程。
  2. 并发标记:和用户线程一起工作,执行GC Roots跟踪标记过程,不需要暂停工作线程。
  3. 重新标记:在并发标记过程中用户线程继续运行,导致在垃圾回收过程中部分对象的状态发生变化。为了确保这部分对象的状态正确性,需要对其重新标记并暂停工作线程。
  4. 并发清除:和用户线程一起工作, 执行清除GC Roots不可达对象的任务,不需要暂停工作线程。

垃圾收集器之 ParNew 与 CMS

STW

CMS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值