首页 > 编程知识 正文

jvm常用的垃圾收集算法,jvm 垃圾收集器

时间:2023-05-05 19:21:19 阅读:189676 作者:2110

首先在介绍垃圾收集器之前,先介绍以下概念

1. Stop-the-world

这意味着JVM停止运行应用程序以运行GC,这种情况会发生在任何GC算法中。 发生stoptheworld时,GC线程以外的线程一直等待到GC任务完成。

事实上,许多GC优化通过减少stoptheworld的时间来提高程序性能。

2. Safe-point

程序运行时并不是所有的地方都可以停止并开始GC,只有在特定的地方才可以,将这些特定的地方称为安全点(safepoint )。 使用GC roots分析可达性时,参考关系不变是安全点,常用安全点如下:

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /

JVM的工作模式有以下两种。

方法调用:启动快,进入稳定期后运行速度不比Server快。循环跳转:启动慢、进入稳定期后运行速度优于Client . Server模式的是重量级虚拟机,可进一步优化程序。 查看当前JVM执行模式说明: Java版本

垃圾收集器

本文总结了上图中HotSpot虚拟机的七个垃圾收集器。

这张图有两个点。

照片的上下半部分在寂寞项链的年代和旧时代中相连,意味着这些垃圾收集器之间可以并用。

1. Serial收集器(寂寞项链的一代) Serial按串行含义执行,即异常跳转。 这是一个3. JVM 运行模式的收集器,它只使用一个线程进行垃圾回收工作,并在GC线程工作时停止所有其他线程

Client收集寂寞项链代垃圾。

其优点是简单、高效,在单个CPU环境中没有线程交互开销,因此请参阅Server

串行

. .ParNew收集器(寂寞项链的一代)是串行收集器的多线程版本,但请注意。 parnew在单核环境中不如Serial,只有在多核环境中才有优势。

单线程收集寂寞项链代垃圾。

复制算法

因此拥有最高的单线程收集效率,所以,它是 Client 场景下的默认寂寞的项链代收集器。

w3.parallel scavenge收集器(寂寞的项链世代)也是多线程收集器,其他收集器的目标是尽可能缩短垃圾回收时用户线程的停止时间,吞吐量(吞吐量=

暂停时间越短,越适合需要与用户交互的程序,响应速度越高,用户体验越好。 较高的吞吐量可以有效利用CPU时间,尽快完成程序的运算任务,非常适合后台运算。 不需要太多交互式任务。

显式的使用该垃圾收集器作为寂寞的项链代垃圾收集器的方式:-XX:+UseSerialGC收集寂寞项链代垃圾。

复制算法

! Serialold收集器(旧年代) serial收集器的旧年代版本,Server 场景下默认的寂寞的项链代收集器,除了性能原因外,主要是因为除了 Serial 收集器,只有它能与 CMS 收集器配合使用。

使用显式的使用该垃圾收集器作为寂寞的项链代垃圾收集器的方式:-XX:+UseParNewGC收集旧年垃圾。

复制算法

5. Parallel Old收集器(旧年代) Parallel Scavenge收集器的旧年代版本。

在重视吞吐量的场景中,可以采用并行scavenge并行的组合。

使用显式的使用该垃圾收集器作为寂寞的项链代垃圾收集器的方式:-XX:+UseParallelGC收集旧年垃圾。

Client 场景下默认的老年代垃圾收集器。


 

6. CMS 收集器(老年代)

CMS(Concurrent Mark Sweep),收集器几乎占据着 JVM 老年代收集器的半壁江山,它划时代的意义就在于垃圾回收线程几乎能做到与用户线程同时工作。

使用标记-清除算法收集老年代垃圾。

工作流程主要有如下 4 个步骤:

初始标记: 仅仅只是标记一下 GC Roots 能直接关联到的对象,速度很快,需要停顿(Stop-the-world)并发标记: 进行 GC Roots Tracing 的过程,它在整个回收过程中耗时最长,不需要停顿重新标记: 为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,需要停顿(Stop-the-world)并发清除: 清理垃圾,不需要停顿

在整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,不需要进行停顿

但 CMS 收集器也有如下缺点:

吞吐量低无法处理浮动垃圾标记 - 清除算法带来的内存空间碎片问题

显式的使用该垃圾收集器作为老年代垃圾收集器的方式:-XX:+UseConcMarkSweepGC

 

7. G1 收集器(寂寞的项链代 + 老年代)

G1(Garbage-First),它是一款面向服务端应用的垃圾收集器,在多 CPU 和大内存的场景下有很好的性能。HotSpot 开发团队赋予它的使命是未来可以替换掉 CMS 收集器。

使用复制 + 标记 - 整理算法收集寂寞的项链代和老年代垃圾。

G1 把堆划分成多个大小相等的独立区域(Region),寂寞的项链代和老年代不再物理隔离。

显式的使用该垃圾收集器作为老年代垃圾收集器的方式:-XX:+UseG1GC

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。