一次完整的GC流程

Java堆中内存区分 

        Java的堆由新生代(Young Generation)和老年代(Old Generation)组成。新生代存放新分配的对象,老年代存放长期存在的对象。
        新生代(Young)由年轻区(Eden)、Survivor区组成(From Survivor、To Survivor)。默认情况下,新生代的Eden区和Survivor区的空间大小比例是8:2,可以通过-XX:SurvivorRatio参数调整。 

一次完整的GC流程

  1. 对象分配

    • 新创建的对象通常首先分配在新生代的Eden区。如果对象体积过大,直接分配到老年代(大对象直接分配)。
  2. Minor GC(新生代垃圾回收)

    • 当Eden区空间不足时,会触发一次Minor GC。这个过程中,Eden区中不再被引用的对象将被回收。
    • 存活下来的对象会被移动到Survivor区的一个(假设为S1),如果S1区也满了,则这些对象和S1中已有的、经历过一次GC的对象一起被移到另一个Survivor区(S2)或者直接晋升到老年代,具体取决于对象的年龄和Survivor区的配置。
    • 每次Minor GC后,对象的年龄增加1,当对象年龄达到预设阈值(默认15)时,该对象会被晋升到老年代。
  3. Survivor区调整

    • Survivor区之间的对象会在几次Minor GC后进行交换,目的是尽可能地利用Survivor空间来保留更多可幸存的对象,减少晋升到老年代的对象数量。
  4. Full GC(老年代垃圾回收)

    • 当老年代空间不足,或者满足其他触发条件(比如元数据空间不足、System.gc()被显式调用等)时,会触发Full GC。
    • Full GC是一个更耗时的过程,因为它涉及整个堆(包括新生代和老年代)以及方法区(元数据区)的垃圾回收。
    • Full GC使用标记-清除、标记-整理(也称为标记-压缩)或其他组合算法来回收空间,这一步可能包括所有存活对象的移动和空间碎片的整理。
  5. 标记过程

    • 不论是Minor GC还是Full GC,都会经历一个标记过程,用来识别哪些对象是可达的(即从GC Roots开始可以访问到的对象)。
    • 这个过程通常包括两个阶段:初始标记和并发标记,后者可以在程序运行时并发执行以减少暂停时间。
  6. 清理与压缩

    • 清理阶段会删除已被标记为不可达的对象。
    • 在某些情况下,特别是Full GC,还会进行压缩操作,移动存活对象以消除碎片,优化内存布局。

 

 

 YoungGC和FullGC的触发条件是什么

        YoungGC的触发条件比较简单,那就是当年轻代中的eden区分配满的时候就会触发。

FullGC的触发条件比较复杂也比较多,主要以下几种:

1. 老年代空间不足创建一个大对象,超过指定阈值会直接保存在老年代当中,如果老年代空间也不足,会触发Full GC。

2.当准备要触发一次YoungGC时,会进行空间分配担保,在担保过程中,发现虚拟机会检查老年  代最大可用的连续空间小于新生代所有对象的总空间,但是HandlePromotionFailure=true,继续检查发现老年代最大可用连续空间小于历次晋升到老年代的对象的平均大小时,会触发一次FullGC


3.永久代空间不足如果有永久代的话,当在永久代分配空间时没有足够空间的时候,会触发FullGC


4.代码中执行System.gc()
        代码中执行System.gc()的时候,会触发FullGC,但是并不保证一定会立即触发。

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

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

相关文章

亚马逊卖家,如何打造爆款,如何提高产品权重、曝光、流量?

新老卖家们要知道,亚马逊A9算法影响产品排名的关键因素:产品相关性、销售排名、产品价格、点击率、转化率、产品图片、买家评论、买家满意度、QA的答复情况、搜索结果页详细信息级别。亚马逊A9算法,是根据卖家提供的listing文案信息进行收录、…

新一代GPT!GPT-4O:更快、更懂人类情感的人工智能新纪元

今天凌晨(5.14凌晨),OpenAI 的 GPT-4O 版本在自然语言处理领域带来了革命性的改变。不仅在处理速度上获得了显著提升,GPT-4O 还增加了对人类情感的理解能力,这使得它在与人类的交互中更加自然和富有同理心。本文将深入…

嵌入式学习<2>:EXTI、ADC、NVIC和AFIO

嵌入式学习_part2 本部分笔记用于学习记录,笔记源头 >>b站江科大_STM32入门教程_EXTI EXTI、ADC、NVIC和AFIO 开发环境:keil MDK、STM32F103C8T6 1 )EXTI STM32F10xxx参考手册(中文)-> 中断与事件 ->…

[OpenGL] PCF 柔和阴影

目录 一 为什么要使用PCF技术? 二 算法 三 效果 本章节源码点击此处 一 为什么要使用PCF技术? 在阴影改善这篇文章最后我们发现阴影的边缘锯齿化很严重,对于这种问题主要是因为采样精度的问题对于不同片段有可能从深度纹理中采样到了同一个纹理像素,这就导致形成了明显的…

python 批量webp格式转换成jpg

首先,你需要安装Pillow库。如果还未安装,可以通过pip安装: pip install Pillow 创建一个Python脚本来读取webp文件,并将其转换为jpg格式。 只需修改source_folder和dest_folder变量为你的实际文件夹路径即可使用这个脚本。 fro…

InstantStyle —— 文本到图像生成中的风格保持新突破

在人工智能领域,文本到图像生成(Text-to-Image Generation)技术正迅速发展,其应用范围从娱乐到专业设计不断扩展。然而,风格一致性生成一直是该领域的一个技术难题。最近,InstantX团队提出了一种名为Instan…

MathType7.4破解版补丁包下载安装无需激活秘钥许可证

MathType是一个强大的数学公式编辑器,它为教育工作者、学生和科研人员提供了一种高效、便捷的数学公式编辑方法。无论是在撰写学术论文、制作教学课件还是进行科研报告,MathType都能满足您的需求。 MathType具有丰富的符号库和模板。它包含了几乎所有常用…

Docker安装、使用及常用命令

一、Docker是什么? Docker是一种开源的容器化技术,允许开发者将应用及其运行环境打包在一个轻量级、可移植的容器中。这样,不论在开发、测试还是生产环境中,应用都能在任何Docker支持的平台上无缝运行。Docker使用Dockerfile来自…

Linux 多进程开发

0、程序和进程 程序 是包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程。 进程 是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 1、区别 程序是静态的,进程是动态的,程序是存储在某…

1689 ssm社区老人危机干预系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm社区老人危机干预系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主…

常见加解密算法03 - RC4逆向认识

各位聪明绝顶,才高八斗的读者们你们好!今天我们主要讨论编译之后的RC4算法识别。 题外话,之前看到一个蛋疼的小知识,说“势”这个字最好不好查词典释义。我是很好奇的,果然后来无法直视势不可挡这个成语。 言归正传&am…

【MySQL】常见的数据类型

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:MySQL 目录 👉🏻常见的数据类型bit类型enumset集合查询函数find_ in_ set 👉🏻浮点类型float类型decimal &am…

Ansys Zemax|HUD 设计实例

说明 本文介绍了HUD设计实例。 实例说明 规格如下: 显示器尺寸:24*8mm 眼盒尺寸:100*40mm 放大倍率:5 (虚像尺寸 120*40mm) 虚像距离:1.8m 最终光学系统的整体布局如下图所示。 从HUD发出的…

官宣!招商工作全面启动“2024南京智博会”众多企业踊跃报名

2024南京智博会,作为一场盛大的科技盛宴,经过多年的发展与沉淀,已经成功跻身国内顶尖的高新技术产品及解决方案的展示平台之列,成为了引领行业趋势的风向标。本届智博会不仅汇聚了众多知名科技企业,更展现了国内外最前…

中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询

目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码(一)编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是&#xff0…

哪个品牌led灯好?五大好用护眼台灯推荐

哪个品牌led灯好?目前LED护眼台灯当中做得比较好的有明基、松下、书客等品牌。在如今LED灯市场的海洋中,选择一款可靠的护眼台灯变得愈发重要。然而,众多品牌和产品的涌现也让消费者面临着选择困难。为了帮助大家找到最合适的LED台灯&#xf…

Chromium 调试指南2024 Windows11篇-使用日志来辅助调试(八)

1. 日志:你的第一个调试工具 日志是开发者最简单也是最常用的调试工具之一,它能够提供程序运行时的详细记录。通过合理的日志记录策略,开发者可以快速定位问题发生的上下文,理解程序的运行流程和状态。 2. 如何在Chromium中使用…

百度云防护自定义访问策略URI使用说明

百度云防护的创建防御模板里的自定义访问策略功能是一个不错自定义拦截功能。 其中URI拦截策略是一种非常不错的拦截手段,今天我们来说明下如何使用URI。 首先什么是URI?关于什么是URI百度上写了很多,不过对于小白来说,是非常难…

中国平安发布“绿美广东·平安古树守护行动” 为广东古树名木提供超2600万风险保障

为响应国家关于生态文明建设的号召,发展绿色金融,助力构建“绿美广东”生态建设新格局,5月11日,中国平安在广东省韶关市南华寺成功举办“绿美广东平安古树守护行动”活动,并发布“我为古树上保险”计划,将为…

Qt实现水平方向流式布局FlowLayout简单又实用!

Qt中常见的布局管理器有: QHBoxLayout:水平布局(常用) QVBoxLayout:垂直布局(常用) QGridLayout:表格布局(常用) QFormLayout:表单布局&#…