JVM原理及优化_垃圾回收器

news/2024/5/14 13:44:28/文章来源:https://blog.csdn.net/weixin_44219219/article/details/126934757

文章目录

    • JVM原理及调优_垃圾回收器
        • 什么是垃圾收集器?
        • 垃圾回收器详解
          • Serial
          • ParNew
          • Parallel Scavenge
          • Serial Old
          • Parallnel old
          • CMS
          • G1

JVM原理及调优_垃圾回收器

什么是垃圾收集器?

  • 垃圾收集器是垃圾回收算法(引用计数法、标记清除法、标记整理法、复制算法)的具体实现,不同垃圾收集器、不同版本的JVM所提供的垃圾收集器可能会有很在差别。

图中展示了7种不同分代的收集器:
Serial、ParNew、Parallel Scavenge、CMS、Serial Old、Parallel Old、G1

而它们所处区域,则表明其是属于新生代还是老年代的收集器:

  • 新生代收集器:Serial、ParNew、Parallel Scavenge
  • 老年代收集器:CMS、Serial Old、Parallel Old
  • 整堆收集器:G1

两个收集器间有连线,表明它们可以搭配使用:

Serial / Serial Old
Serial / CMS
ParNew / Serial Old
ParNew / CMS
Parallel Scavenge / Serial Old
Parallel Scavenge / Parallel Old
G1

垃圾回收器详解

Serial

Serial 收集器:新生代。发展历史最悠久的收集器。它是一个单线程收集器,它只会使用一个 CPU 或者线程去完成垃圾收集工作,而且在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。
特点:

新生代收集器,使用复制算法收集新生代垃圾。
单线程的收集器,GC工作时,其它所有线程都将停止工作。
简单高效,适合单 CPU 环境。单线程没有线程交互的开销,因此拥有最高的单线程收集效率。

//如何设置JVM参数底下会讲解:这里只是列举一部分参数:设置垃圾收集器:"-XX:+UseSerialGC"  --添加该参数来显式的使用改垃圾收集器;
ParNew

ParNew 收集器:新生代。Serial 的多线程版本,即同时启动多个线程去进行垃圾收集。
特点:

新生代收集器。ParNew垃圾收集器是Serial收集器的多线程版本,采用复制算法。
除了多线程外,其余的行为、特点和Serial收集器一样。
只有它能与 CMS 收集器配合使用。
但在单个CPU环境中,不比Serail收集器好,多线程使用它比较好。

//如何设置JVM参数底下会讲解:这里只是列举一部分参数:设置垃圾收集器:"-XX:+UseParNewGC"  --强制指定使用ParNew;    
设置垃圾收集器: "-XX:+UseConcMarkSweepGC"  --指定使用CMS后,会默认使用ParNew作为新生代收集器;
设置垃圾收集器参数:"-XX:ParallelGCThreads"  --指定垃圾收集的线程数量,ParNew默认开启的收集线程与CPU的数量相同;
Parallel Scavenge

Parallel Scavenge 收集器:新生代。和 ParNew 的关注点不一样,该收集器更关注吞吐量,尽快地完成计算任务。
特点:

新生代收集器。
采用复制算法。
多线程收集。
与ParNew 不同的是:高吞吐量为目标,(减少垃圾收集时间,让用户代码获得更长的运行时间)

//如何设置JVM参数底下会讲解:这里只是列举一部分参数:设置垃圾收集器:"-XX:+UseParallelGC"  --添加该参数来显式的使用改垃圾收集器;
设置垃圾收集器参数:"-XX:MaxGCPauseMillis"  --控制垃圾回收时最大的停顿时间(单位ms)
设置垃圾收集器参数:"-XX:GCTimeRatio"  --控制程序运行的吞吐量大小吞吐量大小=代码执行时间/(代码执行时间+gc回收的时间)
设置垃圾收集器参数:"-XX:UseAdaptiveSizePolicy"  --内存调优交给虚拟机管理
Serial Old
  • Serial Old 收集器:Serial 的老年代版本,使用标记 - 整理算法。

特点:

  1. 老年代收集器, 采用"标记-整理"算法。
  2. 单线程收集。
//如何设置JVM参数底下会讲解:这里只是列举一部分参数:在JDK1.5及之前,与Parallel Scavenge收集器搭配使用,
在JDK1.6后有Parallel Old收集器可搭配。
现在的作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用
Parallnel old
  • Parallnel old 收集器,多线程:Parallel 的老年代版本,使用标记 - 整理算法。

特点:

  1. 针对老年代。
  2. 采用"标记-整理"算法。
  3. 多线程收集。
  4. 但在单个CPU环境中,不比Serial Old收集器好,多线程使用它比较好。
//如何设置JVM参数底下会讲解:这里只是列举一部分参数:设置垃圾收集器:"-XX:+UseParallelOldGC":指定使用Parallel Old收集器;
CMS
  • CMS 收集器:老年代。是一种以获取最短回收停顿时间为目标的收集器,适用于互联网站或者 B/S 系统的服务端上。
    特点:
  1. 针对老年代,采用标记-清楚法清除垃圾;
  2. 基于"标记-清除"算法(不进行压缩操作,产生内存碎片);
  3. 以获取最短回收停顿时间为目标;
  4. 并发收集、低停顿;
  5. CMS收集器有3个明显的缺点:1.对CPU资源非常敏感、2.无法处理浮动垃圾,可能出现"Concurrent Mode Failure"失败、3.产生大量内存碎片
  6. 垃圾收集线程与用户线程(基本上)可以同时工作
//如何设置JVM参数底下会讲解:这里只是列举一部分参数:设置垃圾收集器:"-XX:+UseConcMarkSweepGC":指定使用CMS收集器;
G1
  • G1 收集器:分代收集器。当今收集器技术发展最前沿成果之一,是一款面向服务端应用的垃圾收集器。G1可以说是CMS的终极改进版,解决了CMS内存碎片、更多的内存空间登问题。虽然流程与CMS比较相似,但底层的原理已是完全不同。

特点:

  1. 能充分利用多CPU、多核环境下的硬件优势;
  2. 可以并行来缩短(Stop The World)停顿时间;
  3. 也可以并发让垃圾收集与用户程序同时进行;
  4. 分代收集,收集范围包括新生代和老年代
  5. 能独立管理整个GC堆(新生代和老年代),而不需要与其他收集器搭配;
  6. 能够采用不同方式处理不同时期的对象;
  7. 应用场景可以面向服务端应用,针对具有大内存、多处理器的机器;
  8. 采用标记-整理 + 复制算法来回收垃圾
//如何设置JVM参数底下会讲解:这里只是列举一部分参数:设置垃圾收集器:"-XX:+UseG1GC":指定使用G1收集器;
设置垃圾收集器参数:"-XX:InitiatingHeapOccupancyPercent":当整个Java堆的占用率达到参数值时,开始并发标记阶段;默认为45;
设置垃圾收集器参数:"-XX:MaxGCPauseMillis":为G1设置暂停时间目标,默认值为200毫秒;
设置垃圾收集器参数:"-XX:G1HeapRegionSize":设置每个Region大小,范围1MB到32MB;目标是在最小Java堆时可以拥有约2048Region

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

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

相关文章

PLM是什么?为什么要上PLM?有什么好处?

PLM是什么?或许早在五年前还有这个疑问,但如今已成为行业竞争的必需品。 PLM即对产品从创建、使用到最终报废,是一种对全生命周期产品数据信息进行管理的理念;是一种应用于在单一地点的企业内部、分散在多个地点的企业内部&#…

SpringBoot JavaBean对象拷贝 orika

前言: 日常开发中,经常会遇到将一个对象bean值复制到另一个bean,一般通过set方法一个一个属性写上去,比较麻烦。当然也有spring、apache的属性拷贝工具,这里介绍一下orika orika 是什么? Orika 是一个 Java Bean 映射框架,它可以递归地将数…

Oracle 11g第一次启动SQL Developer所出现的问题

Oracle 11g第一次启动SQL Developer提示缺少快捷方式 1)问题复刻 当第一次启动SQL Developer的时候提示我 :“Windows 正在查找SQLDEVELOPER.BAT。如果想亲自查找文件,请单击"浏览” 。这个时候如果没有点击浏览,过一会他会自动跳到图二,此时就算点击了修复也无济于事…

zabbix服务器搭建

文章目录zabbix1. 环境准备2. zabbix服务器安装3. 监控本机4. 通过zabbix-agent监控远程机器5. zabbix用户与用户群组6. 监控项与应用集7. 为监控项创建图形8. 自定义监控项9. 为自定义监控项创建图形10zabbix zabbix官网 1. 环境准备 主机ipzabbix_server192.168.44.10agen…

什么是自动采矿卡车autonomous mining trucks

自动采矿卡车 (AMT) 是无人驾驶的矿山重型车辆,可以感知环境并在矿山运输路面上导航,无需任何人工干预。AMT 降低了设备与辅助设备或配备的手动车辆 (EMV) 接触的风险。 矿业在世界经济中发挥着重要作用。随着发达国家追求零伤亡,进入技术工人…

Jenkins Pipeline项目实战

一、项目流程 Jenkins从git拉取指定tag代码 Jenkins构建代码、镜像以及推送镜像到镜像库 Jenkins通过Publish Over SSH通知远程服务器拉取镜像、远程服务器通过镜像启动容器二、实现流程 1、从代码仓中拉取Jenkinsfile文件 2、从git拉取指定tag代码 配置Git参数: 剩下的部分需…

Spring学习的第二天

1. Spring 管理第三方资源导入Druid 坐标<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency>配置数据源对象作为Spr…

【牛客刷题】每日一练—ArrayList的实例强化

✨hello&#xff0c;进来的小伙伴们&#xff0c;你们好呐&#xff01;✨ &#x1f362;&#x1f362;系列专栏&#xff1a;【牛客刷题】 &#x1f32f;&#x1f32f;作者简介&#xff1a;一名大三在读的科班Java编程小白&#xff0c;星夜漫长&#xff0c;你我同行! &#x1f37…

383.赎金信

题目来源&#xff1a; 力扣https://leetcode.cn/problems/ransom-note/题目简介&#xff1a; 判断字符串a中的字母能不能构成字符串b&#xff0c;能的话就返回true&#xff0c;不能就返回false&#xff0c;字符串a里的字母每个都只能用一次&#xff0c;不能重复使用 思路&am…

Endpoint Central的IT资产管理(ITAM)

什么是 IT 资产管理 (ITAM) IT 资产管理 (ITAM) 是识别、发现、采购、管理、监控和处置企业网络中存在的所有公司拥有的数据、设备和软件元素的过程。ITAM 工具可确保集中查看网络中存在的所有资产以及软件和硬件详细信息。拥有完整的 ITAM 流程可以使您能够就收购新资产做出有…

笨方法学Python

前言 这本书指导你在Python中通过练习和记忆等技巧慢慢建设和建立技能,然后应用它们解决越来越困难的问题。在这本书的最后&#xff0c;你需要拥有必要的工具开始进行更多复杂程序的学习。我喜欢告诉大家&#xff0c;我的书带给你们“编程黑带”。意思是说你知道的基础知识足够…

『华强买瓜』奇袭好莱坞!Jupyter也能创建可交互仪表板啦!超全面的英语论文写作套路;神经辐射场NeRF工具包;前沿论文 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f4c6;电子月刊 | &#x1f514;公众号下载资料 | &#x1f369;韩信子 &#x1f4e2; 好莱坞全明星版『华强买瓜』&#xff1a;你这 AI 保熟吗&#xff1f; https://weibo.com/2395607675/M61L994kN 一起来看看 AI 最近又搞出了什么好玩意儿…

gradle缓存路径

gradle缓存路径网上有很多配置教程,但是实际使用过程中发现不是很准确,验证下缓存配置 1.个人认为最优雅 在gradle的安装目录&#xff0c;编辑bin文件夹下的gradle文件&#xff0c;然后找到如下语句: # Add default JVM options here. You can also use JAVA_OPTS and GRADLE…

eplan里面导入3D图

1.第一步,打开RICAD-3D软件 2.点击RICAD-3D 3.进入页名后,①首先点击RITTAL机柜系统-②SMall enclosours-③选中双击compact enclosures-AE 4.双击后出现这个页面,在开放式列表中型号选择1050.500的, 5.点击STEP 3D后面的向下箭头,点击3D系统中性格式,点击STEP3d 6.这边…

初识SpringBoot

文章目录一、SpringBoot特点优点缺点二、时代背景1、微服务2、分布式分布式的困难分布式解决3、云原生上云的困难三、快速上手1、导入依赖2、创建架构编写业务MainApplication作为主程序应用controller作为业务层3、修改端口号一、SpringBoot特点 优点 创建独立Spring应用内嵌…

WoShop多商户直播短视频APP小程序商城全开源无加密商城源码

WoShop多商户直播短视频APP小程序商城全开源无加密商城源码基于现场直播购物模式&#xff0c;用户可以“边看边买”现场直播商城平台&#xff0c;全终端支持&#xff0c;统一管理后台&#xff0c;传播更强&#xff0c;管理更方便&#xff0c;支持私有化配置&#xff0c;提供系统…

牛视系统源码定制开发come here,抖音矩阵系统。

Seo是Search Engine Optimization的缩写&#xff0c;译成英文的意思是‘浏览器强化’&#xff0c;可能有很多爸爸妈妈就会问了&#xff1a;抖音什么时候沦为了浏览器&#xff1f;他不是一种SNS影视娱乐应用软件吗&#xff1f;假如您还这么想&#xff0c;而且就行不通了&#xf…

5分钟,带你看完24岁60W年薪架构师的简历,上面竟然写着精通JVM

前言 近期&#xff0c;看了一份24岁60W年薪架构师简历&#xff0c;上面写着他的求职意向所掌握的技能....... 所掌握的技能大部分写的都是精通&#xff01;我不禁想问&#xff0c;大佬都这么强吗&#xff1f;你敢在简历上把所有的技能都写精通吗&#xff1f; 简历 下面来带…

mysql事务详解

目录 一、MySQL事务的概念 二、MySQL事务的特点 原子性 一致性 隔离性 事务之间的相互影响 三、MySQL及事务隔离级别 查询全局事务隔离级别 查询会话事务隔离级别 设置全局事务隔离级别 事务控制语句 测试提交事务 测试回滚事务 用别的用户查看这个表&#xff0c;数据已经…

使用容器运行nginx及docker命令介绍

目录 一.使用docker run命令运行Nginx应用 1.观察下载容器镜像过程 查看容器状态 2.访问容器中的nginx服务 1.确认容器的ip地址 2.容器的网络说明 3.访问容器 二.docker命令 1.帮助命令 2.docker run 3.docker ps 4.docker inspect 5.docker exec 6.docker attach 7…