java8常用垃圾回收器

java8常用垃圾回收器

垃圾回收基本概念:

垃圾回收是一种自动化的内存管理机制,用于检测和释放不再被程序使用的内存资源,以便回收用于存储对象的内存空间。在Java中,垃圾回收主要通过以下方式实现:

  1. 引用类型: Java中的对象通过引用进行访问和操作。引用类型包括强引用、软引用、弱引用和虚引用。垃圾回收的主要目标是处理那些不再被任何引用指向的对象,以释放它们占用的内存。
  2. 对象生命周期: Java对象从创建到销毁具有生命周期。当一个对象不再被任何强引用指向时,它变成了不可达对象。垃圾回收器会识别这些不可达对象,并将它们标记为垃圾对象。
  3. 标记-清除算法: 这是最基本的垃圾回收算法之一。在标记阶段,垃圾回收器遍历所有的可达对象,并将它们标记为活动对象。然后,在清除阶段,垃圾回收器会扫描整个内存,释放那些未标记的对象所占用的空间。
  4. 垃圾收集器: JVM中有多种垃圾收集器,如Serial收集器、Parallel收集器、CMS收集器、G1收集器等。这些收集器使用不同的算法和策略来进行垃圾回收,以满足不同场景下的需求。
Java 8 垃圾回收器:

Java 8几种主要的垃圾回收器,包括Serial、Parallel、CMS(Concurrent Mark-Sweep)和G1(Garbage-First)。每种垃圾回收器都有不同的工作原理、优缺点和适用场景。

  1. Serial : 最早的垃圾回收器,工作原理:Serial垃圾回收器使用单线程进行垃圾回收,即在回收期间只使用一个CPU核心。它采用标记-复制算法来进行垃圾回收,即将存活的对象复制到一个新的内存区域,然后清除旧区域的所有对象。 优点:简单高效,适用于单线程应用或小型应用,能够最大限度地减少停顿时间。 缺点:不能充分利用多核处理器,可能会导致长时间的停顿。 适用场景:适用于单线程或低并发的小型应用。
  2. Parallel :多线程, 工作原理:Parallel垃圾回收器也采用标记-复制算法,但是与Serial不同,它使用多线程并行进行垃圾回收,以充分利用多核处理器。 优点:相较于Serial,Parallel可以更好地利用多核处理器,回收速度更快,适用于中等规模的应用。 缺点:可能会导致较长的停顿时间,不适用于对停顿时间有严格要求的应用。 适用场景:适用于中等规模的应用,对吞吐量要求较高,可以接受一定的停顿时间。
  3. CMS(Concurrent Mark-Sweep)最经典的垃圾回收器,开启了并发标记时代,: 工作原理:CMS垃圾回收器采用标记-清除算法,与Serial和Parallel不同的是,CMS在标记和清除阶段都使用多线程并行进行,以减少停顿时间。它在标记阶段并发地标记出存活对象,然后在清除阶段并发地清除无用对象。 优点:较短的停顿时间,适用于对低停顿时间有要求的中大型应用。 缺点:可能会因并发造成一定的CPU负载,可能会导致碎片问题,需要频繁的Full GC。 适用场景:适用于对停顿时间要求较高的中大型应用,但需要注意碎片问题。
  4. G1(Garbage-First)垃圾回收器: 工作原理:G1垃圾回收器采用分代的概念,将堆内存分为多个区域,每个区域可以是Eden、Survivor或Old区。它使用多线程并行来进行垃圾回收,在不同区域之间动态调整回收策略,旨在减少停顿时间和碎片问题。 优点:较短的停顿时间,能够更好地控制内存使用和垃圾回收行为,适用于大型应用。 缺点:相对复杂,需要较多的配置调优,可能会导致一些性能抖动。 适用场景:适用于大型应用,对停顿时间有一定要求,可以承受一定性能抖动。
总结:

随着java版本不停迭代,垃圾回收器的性能也在不断提升。但java8大部分版本默认使用 Parallel Scavenge(新生代) + Parallel Old(老年代),推荐手动开启G1收集器,jvm参数:-XX:+UseG1GC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值