Jvm(二)新生代和老年代与GC回收

目录

新生代和老年代

新生代

MinorGC

老年代(Old Generation)

MajorGC

Minor GC、Major GC 和 Full GC

三个GC具体区别和使用场景

JVM GC及内存调优的参数

调优建议


前言-与正文无关

​    生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步,感受周围的世界。让我们一起提醒自己,要适时放慢脚步,欣赏生活中的每一道风景,享受与家人朋友的温馨时光,发现那些平凡日子里隐藏的幸福时刻。因为,这些点点滴滴汇聚起来的,才是构成我们丰富多彩生活的本质。希望每个人都能在繁忙的生活中找到自己的快乐之源,不仅仅为了生存而工作,更为了更好的生活而生活.

​       送你张美图!希望你开心!

新生代和老年代


在Java虚拟机(JVM)的垃圾回收机制中,堆内存被分为几个区域,主要包括新生代(Young Generation)和老年代(Old Generation)。这种划分主要是基于对象的生命周期。

 主要看第二章图上图只是说叫法不同时的样子,一个Eden空间和两个幸存者(Survivor)空间(通常称为S0和S1或From和To)

新生代

新生代用于存放新创建的对象。大多数情况下,Java对象大部分是短命的,因此新生代通常较小,且频繁进行垃圾回收。

  • 结构:新生代通常进一步分为三个区:一个Eden空间和两个幸存者(Survivor)空间(通常称为S0和S1或From和To)。大部分新创建的对象首先被分配到Eden区。当进行垃圾回收时,存活的对象会从Eden区移动到一个Survivor空间,而在Survivor空间中已经存活了一段时间的对象最终会被移动到老年代。
  • 回收频率:新生代的垃圾回收频率较高,但每次回收的速度较快,这种回收称为Minor GC。

MinorGC

MinorGC 的过程:采用复制算法。

  1. 首先,把 Eden 和 ServivorFrom 区域中存活的对象复制到 ServicorTo 区域(如果有对象的年龄以及达到了老年的标准,一般是 15,则赋值到老年代区)
  2. 同时把这些对象的年龄 + 1(如果 ServicorTo 不够位置了就放到老年区)
  3. 然后,清空 Eden 和 ServicorFrom 中的对象;最后,ServicorTo 和 ServicorFrom 互换,原 ServicorTo 成为下一次 GC 时的 ServicorFrom 区。

老年代(Old Generation)

目的:老年代用于存放长时间存活的对象。一些大对象,如果在新生代中无法容纳,也可能直接被分配到老年代。

  • 回收频率:老年代的垃圾回收频率较低,但每次回收的时间较长,因为它包含的对象通常更多且更难以确定哪些是垃圾。这种回收称为Major GC或Full GC。
  • 空间大小:老年代的空间通常比新生代大,因为它需要存储更长时间存活的对象。

        分代垃圾回收的主要优势在于能够根据对象的生命周期采用不同的回收策略,从而提高垃圾回收的效率。由于大部分新创建的对象都是"朝生夕死",新生代采用了适合频繁回收的算法(如复制算法)。而老年代中的对象生命周期长,回收频率低,通常采用标记-清除(Mark-Sweep)或标记-整理(Mark-Compact)算法,以减少垃圾回收对应用性能的影响。

MajorGC

MajorGC 采用标记—清除算法:

  1. 首先扫描一次所有老年代,标记出存活的对象
  2. 然后回收没有标记的对象。

MajorGC 的耗时比较长,因为要扫描再回收。MajorGC 会产生内存碎片,为了减少内存损耗,我们一般需要进行合并或者标记出来方便下次直接分配。

当老年代也满了装不下的时候,就会抛出 OOM(Out of Memory)异常。

Minor GC、Major GC 和 Full GC

在 Java 虚拟机(JVM)中,垃圾收集(GC)机制用于自动管理内存,回收不再使用的对象。GC 主要分为三类:Minor GC、Major GC 和 Full GC。这三类 GC 在工作机制、触发条件和影响上有所不同。下面是对这三类 GC 的详细解释及其区别:

Full GC

  • 针对整个堆(包括年轻代和老年代)和方法区进行垃圾收集。全面扫描和回收整个堆和方法区的对象,包括年轻代、老年代和方法区。通常会进行标记、清除和压缩。
  • Full GC:涉及整个堆和方法区,停顿时间更长。频率更低,但对应用性能影响最大,应尽量避免频繁 Full GC。

三个GC具体区别和使用场景

  1. Minor GC

    • 目标:年轻代(Young Generation)。
    • 触发条件:年轻代的 Eden 区满。
    • 特点:频繁、快速、部分停顿。
    • 使用场景:适用于高频率创建对象的场景,如 web 服务器请求处理。
  2. Major GC

    • 目标:老年代(Old Generation)。
    • 触发条件:老年代空间不足。
    • 特点:停顿时间长、回收老年代对象。
    • 使用场景:当对象在年轻代存活较长时间并晋升到老年代时。
  3. Full GC

    • 目标:整个堆(年轻代、老年代)和方法区。
    • 触发条件:显式调用 System.gc()、老年代满、方法区满等。
    • 特点:停顿时间最长、全面回收。
    • 使用场景:通常应尽量避免频繁触发 Full GC,可通过调整内存配置和优化代码来减少 Full GC 的频率。

JVM GC及内存调优的参数

  • -Xms2g:初始化推大小为 2g;
  • -Xmx2g:堆最大内存为 2g;
  • -XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4;
  • -XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2;
  • –XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合;
  • -XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合;
  • -XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器组合;
  • -XX:+PrintGC:开启打印 gc 信息;
  • -XX:+PrintGCDetails:打印 gc 详细信息。

调优建议

  1. 减少 Minor GC 影响

    • 增大年轻代的大小,减少 Minor GC 的频率。
    • 调整年轻代的比例,通过 JVM 参数 -Xmn-XX:NewRatio 等。
    • 优化对象创建和使用,尽量减少短命对象的创建。
  2. 优化 Major GC 和 Full GC

    • 增大老年代的大小,减少 Major GC 和 Full GC 的触发频率。
    • 选择合适的垃圾收集器(如 G1、ZGC、Shenandoah),这些收集器设计用于减少停顿时间。
    • 调整垃圾收集器参数,如 -XX:MaxTenuringThreshold-XX:InitiatingHeapOccupancyPercent 等。

------------------------------------------与正文内容无关------------------------------------
 如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!

混口饭吃了!如果你需要Java 、Python毕设、商务合作、技术交流、就业指导、技术支持度过试用期。请在关注私信我,本人看到一定马上回复!

这是我全部文章所在目录,看看是否有你需要的,如果遇到觉得不对地方请留言,看到后我会查阅进行改正。

A乐神-CSDN博客

关注在文章左上角,作者信息处。

 

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

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

相关文章

多输入多输出非线性对象的模型预测控制—Matlab实现

本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。 一、非线性对象的线性化 运行该示例需要同时安装 Simulink 和 Simulink Control Design。 % 检查是否同时安装了 Simulink 和 Simulink Control Design if ~m…

C语言 指针——指针变量做函数参数:错误案例分析

目录 计算最高分及其学号 计算最高分及其学号

【linux】开机调用python脚本

linux中,可以使用crontab 设置开机自动调用 crontab的安装在前面文章里写过了,不再重复 首先,还是进入crontab配置文件 crontab -e 进入之后,跟其他定时任务不同,只需要在时间配置那里用rebooot 这类之后的两个文件的…

2024最新群智能优化算法:红嘴蓝鹊优化器(Red-billed Blue Magpie Optimizer,RBMO)求解23个函数,提供MATLAB代码

一、红嘴蓝鹊优化器 红嘴蓝鹊优化器(Red-billed Blue Magpie Optimizer,RBMO)由Fu Shengwei 等人于2024年提出,其灵感来自红嘴蓝鹊的高效合作捕食行为,具体模拟了红嘴蓝鹊的搜索、追逐、攻击猎物和食物储存行为。 参考…

Windows Server安全配置

Windows Server操作系统安全配置,加固windows server。 1、密码安全 设置密码最小长度为10 开始-管理工具-本地安全策略-安全设置-账户策略-密码策略,修改密码长度最小值为10。 2、密码使用期限 设置密码最长使用期限为30天 开始-管理工具-本地安全策…

力扣2965. 找出缺失和重复的数字

题目: 给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n * n ,其中的值在 [1, n] 范围内。除了 a 出现两次,b 缺失 之外,每个整数都恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个下标从 0 开始…

CAC2.0全生命周期防护,助力企业构建安全闭环

5月29日,CACTER邮件安全团队凭借多年的邮件安全防护经验,在“防御邮件威胁-企业如何筑起最后防线”直播分享会上展示了构建安全闭环的重要性,并深入介绍了全新CAC 2.0中的“威胁邮件提示”功能。 下滑查看更多直播精彩内容 构建安全闭环的必要…

HackTheBox-Machines--Mirai

Mirai 测试过程 1 信息收集 NMAP 80 端口 指纹识别 目录扫描 http://10.129.141.121/versions http://10.129.141.121/admin 检查 /admin 下接口,发现 http://10.129.141.121/admin/index.php?login 请求,仅密码未知,可以尝试对密码进行爆…

Linux用docker安装ElasticsearchSpringBoot整合ES

一. 部署Elasticsearch 1. docker查询docker容器中的es docker search elasticsearch 2. 安装(PS:查看自己的springBoot的版本号 对应的es版本安装) docker pull elasticsearch:7.6.23. 查看已安装的docker镜像 docker images4. 创建挂…

2024ciscn初赛——easycms

什么是CMS? CMS是“Content Management System”的缩写,意为“内容管理系统”。网站的开发者为了方便,制作了不同种类的CMS,可以加快网站开发的速度和减少开发的成本。 常见的CMS: php类cms系统:dedecms、…

动态分配函数参数用二级指针的作用

文章目录 前言一、案例 前言 在一些情况下,我们需要在函数内部动态地分配内存来存储结构体,并且需要在函数外部访问该结构体。在这种情况下,可以使用二级指针作为函数参数来实现动态内存分配,并且在函数外部使用指针访问结构体。…

教育数字展馆助力全球教育传播,科技引领数字化教育潮流

一、教育数字展馆助力教育传播 1、提高教育资源的可及性 教育数字展馆通过VR和WEB3D技术,将丰富的教育资源呈现在用户面前。不论是名校的经典课程,还是专家的精彩讲座,均可通过教育数字展馆实现线上展示。用户只需登录平台,即可…

如何利用向量数据库来弥补 LLM 的弱点

向量数据库使企业能够以经济且可持续的方式调整通用大型语言模型以供组织特定使用。 译自 How to Cure LLM Weaknesses with Vector Databases,作者 Naren Narendran。 多年来,人们一直在猜测人工智能对企业产生的潜在影响。现在,我们看到来自…

远程工作/线上兼职网站整理(数字游民友好)

文章目录 国外线上兼职网站fiverrupwork 国内线上兼职网站甜薪工场猪八戒网云队友 国外线上兼职网站 fiverr https://www.fiverr.com/start_selling?sourcetop_nav upwork https://www.upwork.com/ 国内线上兼职网站 甜薪工场 https://www.txgc.com/ 猪八戒网 云队友 …

HarmonyOS 鸿蒙DevEco:导入无法运行提示Sync failed

场景:导入官网下载的案例后导入发现无法运行模拟机,Notifications提示Sync failed... 解决:查看Cause发现是版本问题,通过修改相关内容来解决该问题 1、打开案例地址找到hvigor文件夹 2、打开hvigor-config.json5,将&…

零基础入门学习Python第二阶04SQL详解01

SQL 和 MySQL 详解 SQL 详解 我们通常可以将 SQL 分为四类,分别是 DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)和 DCL(数据控制语言)。DDL 主要用于创建…

无需开孔,安全美观:低功耗微波雷达模块开启宠物喂食器新未来

在快节奏的现代生活中,宠物已成为许多家庭的重要成员。然而,忙碌的主人常常为如何确保宠物按时进食而困扰。近年来,智能家居技术飞速发展,宠物喂食器也逐渐智能化,极大地方便了宠物主人。今天,我们要介绍的…

【qt】自定义对话框

自定义对话框 一.自定义对话框的使用1.应用场景2.项目效果3.界面拖放4.模型和视图的设置5.action功能实现 二.自定义对话框的创建1.设置对话框界面2.创建对话框 三.对话框的功能与样式实现1.对话框数据的交换2.对话框的显示3.设置对话框的特性4.完成按钮的功能 四.编辑表头的对…

数组中的第K个最大元素,力扣

目录 题目地址: 我们直接看题解吧: 快速理解解题思路小建议: 审题目事例提示: 解题方法: 解题分析: 解题思路: 题目地址: 215. 数组中的第K个最大元素 - 力扣(LeetCode&a…

ChatGPT的逆袭历程:核心技术深度解析

在ChatGPT问世之前,已有许多大模型存在,但为何只有它成为了AI时代的“iPhone时刻”?这不仅得益于其技术优势,还在于其发展过程中所采用的一系列创新策略。本文将深度复盘ChatGPT的逆袭历程,分析其核心技术,…