JVM 有哪些垃圾回收器?

JVM 有哪些垃圾回收器?

图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,则说明它们可以搭配使用。虚拟机所处的区域则表示它是属于新生代还是老年代收集器。

新生代收集器(全部的都是复制算法):Serial、ParNew、ParallelScavenge

老年代收集器:CMS(标记-清理)、Serial Old(标记-整理)、Parallel Old(标记整理)

整堆收集器: G1(一个Region中是标记-清除算法,2个Region之间是复制算法) 同时,先解释几个名词:

  • 并行(Parallel):多个垃圾收集线程并行工作,此时用户线程处于等待状态
  • 并发(Concurrent):用户线程和垃圾收集线程同时执行
  • 吞吐量:运行用户代码时间/(运行用户代码时间+垃圾回收时间)

1.Serial收集器

Serial收集器是Java虚拟机中的一种垃圾收集器,它主要用于收集年轻代中的垃圾对象。它是一种单线程的垃圾收集器,它会暂停应用程序的执行,然后扫描年轻代中的对象,将不再被引用的对象标记为垃圾对象,并将它们回收。

Serial收集器的优点是简单,适用于单核处理器和小内存环境下的应用程序。但是,由于它是单线程的,所以它的垃圾收集效率较低,会导致应用程序的停顿时间较长。

在Java虚拟机中,可以通过设置参数来选择使用Serial收集器。例如,可以使用以下命令行参数来启用Serial收集器:

-XX:+UseSerialGC

此外,还可以通过设置以下参数来调整Serial收集器的行为:

-XX:NewRatio:设置年轻代和年老代的比例,默认值为2,表示年轻代占堆内存的1/3。

-XX:SurvivorRatio:设置Eden区和Survivor区的比例,默认值为8,表示Eden区占年轻代内存的8/10,Survivor区占年轻代内存的1/10。

-XX:MaxTenuringThreshold:设置对象进入年老代的年龄阈值,默认值为15,表示对象在年轻代中经过15次Minor GC后,会被移到年老代中。

2.ParNew收集器

ParNew收集器是一种年轻代垃圾收集器,它是Serial收集器的多线程版本。与Serial收集器类似,ParNew收集器也是使用标记-复制算法来回收年轻代中的垃圾对象,但它可以使用多线程来加速垃圾收集的过程。

ParNew收集器的优点是可以利用多核处理器的优势,提高垃圾收集效率,并且可以通过设置参数来控制线程数,以适应不同的硬件环境。此外,它还可以与CMS收集器配合使用,提供更高效的垃圾收集能力。

在Java虚拟机中,可以通过以下命令行参数来启用ParNew收集器:

-XX:+UseParNewGC

此外,还可以通过设置以下参数来调整ParNew收集器的行为:

-XX:ParallelGCThreads:设置垃圾收集的线程数,默认值为CPU核心数。

-XX:MaxTenuringThreshold:设置对象进入年老代的年龄阈值,默认值为15。

-XX:SurvivorRatio:设置Eden区和Survivor区的比例,默认值为8,表示Eden区占年轻代内存的8/10,Survivor区占年轻代内存的1/10。

总之,ParNew收集器是一种高效的年轻代垃圾收集器,可以在多核处理器上发挥优势,提供更快速的垃圾收集能力。

3.Parallel Scavenge 收集器

Parallel Scavenge收集器是一种年轻代垃圾收集器,它是一种多线程的收集器,与ParNew收集器类似,它也是使用标记-复制算法来回收年轻代中的垃圾对象。

Parallel Scavenge收集器的主要特点是注重吞吐量,即在尽可能短的时间内完成垃圾收集,以最大化应用程序的运行时间。它可以通过控制垃圾收集线程的数量和优先级来实现高吞吐量的垃圾收集。

与其他收集器不同,Parallel Scavenge收集器的目标是达到一个可控制的吞吐量,而不是尽可能减少停顿时间。因此,它的停顿时间可能会比其他收集器长一些,但是它可以在更短的时间内完成垃圾收集,从而提高应用程序的吞吐量。

在Java虚拟机中,可以通过以下命令行参数来启用Parallel Scavenge收集器:

-XX:+UseParallelGC

此外,还可以通过设置以下参数来调整Parallel Scavenge收集器的行为:

-XX:ParallelGCThreads:设置垃圾收集的线程数,默认值为CPU核心数。

-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间,默认值为200毫秒。

-XX:GCTimeRatio:设置垃圾收集时间占总时间的比例,默认值为99,表示垃圾收集时间占总时间的1%。

总之,Parallel Scavenge收集器是一种注重吞吐量的垃圾收集器,可以在多核处理器上发挥优势,提供更高的应用程序吞吐量。

4.Serial Old收集器

在Java虚拟机中,Serial Old收集器是一种传统的、单线程的垃圾收集器,它主要用于收集老年代的垃圾对象。它采用标记-清除算法,首先标记有用的对象,然后清除其他没用的对象,释放内存空间。

Serial Old收集器的优点是简单、高效,适用于小型应用程序和客户端应用程序。但是,它的缺点是无法充分利用多核CPU的优势,因为它是单线程的,不能并行处理垃圾回收任务。此外,它会导致应用程序暂停,因为在垃圾回收期间,应用程序必须等待垃圾回收完成,才能继续执行。

在Java 8之前,Serial Old收集器是默认的老年代收集器。但是,随着Java虚拟机的不断发展,现在更多的应用程序使用并发收集器或G1收集器来管理垃圾对象。

5.Parallel Old收集器

Parallel Old收集器是Java虚拟机中的一种并行垃圾收集器,它主要用于收集老年代的垃圾对象。与Serial Old收集器不同,Parallel Old收集器可以利用多核CPU的优势,使用多线程并行处理垃圾回收任务,从而提高垃圾回收的效率。

Parallel Old收集器采用标记-整理算法,首先标记需要回收的对象,然后将存活的对象移动到一端,然后清理另一端的对象,释放内存空间。由于采用了并行处理,Parallel Old收集器可以在短时间内完成垃圾回收任务,减少应用程序暂停的时间。

Parallel Old收集器适用于大型应用程序和服务器应用程序,可以在多核CPU上充分利用并行处理的优势。但是,它的缺点是在垃圾回收期间,会占用大量的CPU资源,可能会影响应用程序的性能。此外,它也可能会导致应用程序暂停,因为在垃圾回收期间,应用程序必须等待垃圾回收完成,才能继续执行。

6.CMS收集器

CMS收集器是Java虚拟机中的一种并发垃圾收集器,它主要用于收集老年代的垃圾对象。与Parallel Old收集器不同,CMS收集器可以在应用程序运行的同时进行垃圾回收,减少应用程序暂停的时间。

CMS收集器采用标记-清除算法,首先标记需要回收的对象,然后清除这些对象,释放内存空间。由于采用了并发处理,CMS收集器可以在应用程序运行的同时进行垃圾回收,减少应用程序暂停的时间。

CMS收集器适用于大型应用程序和服务器应用程序,可以在应用程序运行的同时进行垃圾回收,减少应用程序暂停的时间。但是,它的缺点是在垃圾回收期间,会占用一定的CPU资源,可能会影响应用程序的性能。此外,由于采用了标记-清除算法,CMS收集器可能会导致内存碎片问题,需要进行额外的处理来解决。

8.G1收集器

G1收集器是Java虚拟机中的一种并发垃圾收集器,它主要用于收集堆内存中的垃圾对象。与CMS收集器不同,G1收集器可以在应用程序运行的同时进行垃圾回收,减少应用程序暂停的时间。

G1收集器采用分代收集的思想,将堆内存分为多个小块,每个小块称为一个区域。它采用标记-整理算法,在每个区域内进行垃圾回收,然后将存活的对象复制到另一个区域。由于采用了并发处理和分代收集的思想,G1收集器可以在应用程序运行的同时进行垃圾回收,减少应用程序暂停的时间。

G1收集器适用于大型应用程序和服务器应用程序,可以在应用程序运行的同时进行垃圾回收,减少应用程序暂停的时间。它还可以根据应用程序的需求动态调整垃圾回收的时间和区域大小,以达到最优的性能。但是,它的缺点是在垃圾回收期间,会占用一定的CPU资源,可能会影响应用程序的性能。此外,由于采用了标记-整理算法,G1收集器不会产生内存碎片问题。

关于gc的选择

除非应用程序有非常严格的暂停时间要求,否则请先运行应用程序并允许VM选择收集器(如果没有特别 要求。使用JVM提供给的默认gc就好)。 如有必要,调整堆大小以提高性能。 如果性能仍然不能满足目标,请使用以下准则作为选择收集器的起点:

  1. 如果应用程序的数据集较小(最大约100 MB),则选择带有选项-XX:+ UseSerialgc的串行收集器。
  2. 如果应用程序将在单个处理器上运行,并且没有暂停时间要求,则选择带有选项-XX:+UseSerialgc的串行收集器。
  3. 如果(a)峰值应用程序性能是第一要务,并且(b)没有暂停时间要求或可接受一秒或更长时间的暂停,则让VM选择收集器或使用-XX:+ UseParallelgc选择并行收集器
  4. 如果响应时间比整体吞吐量更重要,并且垃圾收集暂停时间必须保持在大约一秒钟以内,则选择具有-XX:+ UseG1gc。(值得注意的是JDK9中CMS已经被Deprecated,不可使用!移除该选项)
  5. 如果使用的是jdk8,并且堆内存达到了16G,那么推荐使用G1收集器,来控制每次垃圾收集的时间。
  6. 如果响应时间是高优先级,或使用的堆非常大,请使用-XX:UseZgc选择完全并发的收集器。(值得注意的是JDK11开始可以启动Zgc,但是此时Zgc具有实验性质,在JDK15中[202009发布]才取消实验性质的标签,可以直接显示启用,但是JDK15默认gc仍然是G1)
  7. 这些准则仅提供选择收集器的起点,因为性能取决于堆的大小,应用程序维护的实时数据量以及可用处 理器的数量和速度。
  8. 如果推荐的收集器没有达到所需的性能,则首先尝试调整堆和新生代大小以达到所需的目标。
  9. 如果性能 仍然不足,尝试使用其他收集器

总体原则:减少STOP THE WORD时间,使用并发收集器(比如CMS+ParNew,G1)来减少暂停时间, 加快响应时间,并使用并行收集器来增加多处理器硬件上的总体吞吐量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安全靶场】-DC-7

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 一、收集信息 1.查看主机是否存活 nmap -T4 -sP 192.168.216.149 2.主动扫描 看开放了哪些端口和功能 n…

【网络】UDP和TCP之间的差别和回显服务器

文章目录 UDP 和 TCP 之间的差别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP API 的使用UDP APIDatagramSocket构造方法方法 DatagramPacket构造方法方法 回显服务器(Echo Server)1. 接收请求2. 根据请求计算响应3. 将…

黑马头条vue2.0项目实战(十一)——功能优化(组件缓存、响应拦截器、路由跳转与权限管理)

1. 组件缓存 1.1 介绍 先来看一个问题? 从首页切换到我的,再从我的回到首页,我们发现首页重新渲染原来的状态没有了。 首先,这是正常的状态,并非问题,路由在切换的时候会销毁切出去的页面组件&#xff…

Java之HashMap的底层实现

Java之HashMap的底层实现 摘要HashMap的底层原理哈希值转换为数组下标节点初始化put(Object key, Object value)重写toString()get(Object key)增加泛化remove(K key) 摘要 本博客主要讲述了Java的HashMap的底层实现 HashMap的底层原理 底层原理:数组链表 过程…

【C/C++】菱形继承问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0

C/S&#xff1a;客户端/服务器端&#xff0c;所有网络应用都是基于客户端服务器端进行的&#xff0c;Java写的是服务端&#xff0c;客户端是一个软件&#xff0c;服务端也是一个软件&#xff0c;两个软件之间交互&#xff1b;&#xff08;只能连接对应的服务器&#xff09; B/…

吐血整理 ChatGPT 3.5/4.0/4o 新手使用手册~

都知道ChatGPT很强大&#xff0c;聊聊天、写论文、搞翻译、写代码、写文案、审合同等等&#xff0c;无所不能~ 那么到底怎么使用呢&#xff1f;其实很简单了&#xff0c;国内AI产品发展也很快&#xff0c;很多都很好用了~ 我一直在用&#xff0c;建议收藏下来~ 有最先进、最…

基于 Appium 的 App 爬取实战

除了运行 Appium 的基本条件外&#xff0c;还要一个日志输出库 安装&#xff1a; pip install loguru 思路分析 首先我们观察一下整个 app5 的交互流程&#xff0c;其首页分条显示了电影数据&#xff0c; 每个电影条目都包括封面&#xff0c;标题&#xff0c; 类别和评分 4…

Godot《躲避小兵》实战之创建玩家场景

项目设置完之后&#xff0c;我们就可以开始处理玩家控制的角色。 这里我们将玩家放在一个单独的场景当中&#xff0c;这样做的好处是在游戏的其他部分做出来之前&#xff0c;我们就可以对其进行单独测试。 节点结构 场景是一个节点树结构&#xff0c;因此一个场景需要有一个…

WordPress美化节日灯笼插件,适合春节的时候使用

源码介绍&#xff1a; WordPress美化节日灯笼插件&#xff0c;适合每年过年的时候安在网站上使用&#xff0c;这款插件可以备用着&#xff0c;一款WordPress节日灯笼美化插件&#xff0c;可以给网页自动加一个灯笼效果使用说明&#xff1a;到网站WP后台 - 插件 - 安装插件 - 上…

[C#]基于winform结合photocartoon算法实现人物卡通化源码实现

【官方框架】 https://github.com/minivision-ai/photo2cartoon 简介 人像卡通风格渲染的目标是&#xff0c;在保持原图像ID信息和纹理细节的同时&#xff0c;将真实照片转换为卡通风格的非真实感图像。我们的思路是&#xff0c;从大量照片/卡通数据中习得照片到卡通画的映射…

企业级web应用服务器tomcat

目录 一、Web技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二、tomcat的功能介绍 2.1 安装 tomcat 环境准备 2.1.1 安装java环境 2.1.2 安装并启动tomcat …

vscode提升:JSON 中不允许有注释

解决方案 &#xff1a; 运行&#xff1a; json with comment 参考链接&#xff1a; https://blog.csdn.net/eqizhihui/article/details/134014010 人工智能学习网站 https://chat.xutongbao.top

基于飞腾平台的Hbase的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

iOS Native与JS通信:JSBridge

文章目录 一、简介二、JS 调用 Native1.使用 URL Schemea.UIWebViewb.WKWebView 2.使用 JavaScriptCore (iOS 7)3.使用 WKWebView 和 WKScriptMessageHandler (iOS 8) 三、Native 调用 JS1.使用 UIWebView2.使用 WKWebView3.使用 JavaScriptCore (iOS 7) 一、简介 对于移动应用…

深入浅出:你需要了解的用户数据报协议(UDP)

文章目录 **UDP概述****1. 无连接性****2. 尽最大努力交付****3. 面向报文****4. 多种交互通信支持****5. 较少的首部开销** **UDP报文的首部格式****详细解释每个字段** **UDP的多路分用模型****多路分用的实际应用** **检验和的计算方法****伪首部的详细内容****检验和计算步…

Python 数据分析之Numpy学习(一)

Python 数据分析之Numpy学习&#xff08;一&#xff09; 一、Numpy的引入 1.1 矩阵/向量的按位运算 需求&#xff1a;矩阵的按位相加 [0,1,4] [0,1,8] [0,2,12] 1.1.1 利用python实现矩阵/向量的按位运算 # 1.通过列表实现 list1 [0, 1, 4] list2 [0, 1, 8]# 列表使用…

iOS 18 Beta 5:苹果的细腻之笔,绘制用户体验新画卷

在苹果的世界里&#xff0c;每一次系统更新都是对用户体验进行的一次精心雕琢。 随着iOS 18 Beta 5的上线&#xff0c;苹果带来了一系列令人耳目一新的功能&#xff0c;同时也在系统的每个细微之处展现了对完美的追求。 Safari浏览器的“干扰控制”功能 在今天信息充斥的数字…

SpringBoot接入高德地图猎鹰轨迹服务API

SpringBoot接入高德地图猎鹰轨迹服务API 一、AP文档 猎鹰轨迹服务API文档 二、页面图 1、需登录账号&#xff0c;申请对应的应用key值 三、代码部分&#xff1a; 1、控制层 RestController RequestMapping("/gdTrack") public class TrackController {private …

搜维尔科技:【研究】Haption Virtuose外科手术触觉视觉学习系统的开发和评估

Haption面临挑战 除此之外&#xff0c;外科医生有时会对骨组织进行非常复杂的手术&#xff0c;其中一个例子是人工耳蜗的手术植入。重要的是要避免神经或血管等危险结构受伤&#xff0c;并尽可能轻柔地进行手术。在外科医生能够安全、无差错地进行此类手术之前&#xff0c;需要…