JVM堆内存的结构,YGC,FGC的原理

JVM堆内存结构:
JVM堆内存可分为三个区域:新生代(Young Generation)、年老代(Tenured Generation,也叫做Old Generation)和永久代(Permanent Generation,也叫做Method Area)。其中,新生代又分为一个Eden区和两个Survivor区。

Eden区:是新生代中对象最初被创建的地方。当新创建一个Java对象时,该对象会被分配在Eden区。如果Eden区无法容纳新创建的Java对象,就会触发一次Minor GC(年轻代垃圾收集),将Eden区和Survivor区中没有被引用的对象清除,而仍存活的对象则会被移至Survivor区。

Survivor区:当Java对象在Eden区中经过一次Minor GC后,如果在Survivor区中已经存在一份相同的对象,就会将该对象复制到Survivor区,同时更新该对象的引用计数器。Survivor区是一块大小较小的区域,通常分为两个大小相等的区域。每次Minor GC后,Survivor区中存活的Java对象都会被复制到另一个空区,同时清空这个区域。Survivor区的主要作用是存放年轻代中从Eden区中被复制过来的存活对象,以及在Minor GC时被转移到另一个Survivor区中的存活对象。

年老代:当Java对象在Survivor区中经过多次复制后仍然存活,它们就会被晋升到年老代。年老代是专门存放Java长生命周期对象的区域,因此也被称为Old Generation。当年老代区域无法容纳新创建的Java对象时,就会发生一次Full GC(全局垃圾收集),将整个堆内存中无用的对象都清除掉。

永久代:是一块专门存储Java类(Class)信息的区域,也被称为Method Area。在Java 8及以后的版本中,永久代已经被Metaspace取代。

YGC和FGC的原理:
在Java的内存管理中,每一次GC都有一个主要的目标,就是清除无用的对象,重新回收内存空间。另外,JVM的内存管理还存在一些通用的策略,比如对象的创建、移动和回收等。

YGC(年轻代GC):
在JVM中,当Eden区和Survivor区中没有存活对象时,就会进行一次YGC。YGC的主要目标是清除年轻代中的无用对象,将存活对象移动到Survivor区。在经过一定时间和一定次数的YGC后,年轻代中的存活对象会被晋升到年老代。这是因为年老代中的对象生命周期较长,因此在Full GC时才会被收集。

FGC(Full GC):
在JVM中,当年老代区域无法容纳新创建的Java对象时,就会发生一次Full GC,将整个堆内存中无用的对象都清除掉。Full GC清理的对象范围包括年轻代、年老代和永久代。Full GC会带来较长的停顿时间,因此需要尽可能地避免触发Full GC。

总结:
YGC主要是针对年轻代和Survivor区进行垃圾回收的,而FGC则是对整个堆内存进行垃圾回收的。它们的共同目标都是将无用的对象从内存中清理出去,释放内存空间,以便程序能够更加高效地运行。

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

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

相关文章

linux 设置nginx开机自启

1、关闭当前nginx运行 systemctl stop nginx 2、添加以下内容到nginx.service文件,注意nginx.pid文件的路径,要替换哦! vim /etc/systemd/system/nginx.service [Unit] DescriptionThe NGINX HTTP and reverse proxy server Afternetwork…

ArcGIS如何快速对齐两个图层

1、问题 如何让两个图层快速对齐 2、使用捕捉工具 移动点或折点,使其与其他要素的折点、边或端点精确重合。 可指定捕捉规则来控制是将输入折点捕捉到指定距离范围内的最近折点、边还是端点。

MySQL数字相关数据处理函数

目录 1. 随机数生成 rand ( ) 2. 四舍五入 round() 3. 舍去 truncate ( ) 4. 向上/下取整 5. 空处理 ifnull( x , y ) 1. 随机数生成 rand ( ) rand ( ) 生成 0 到 1 的随机数; rand ( x ) 生成 0 到 1 的随机数…

简单理解Lua 协程(coroutine)

也许更好的阅读体验 协程简单理解为可以暂停的线程,但是同一时刻只有一个协程可以处于运行状态。 文章目录 coroutine.create()coroutine.resume()coroutine.wrap()coroutine.yield()coroutine.resume()参数传递resume和yield之间互换数据 coroutine.create() lua…

403 禁止错误: 它是什么?如何修复?

您应该对403错误代码很熟悉!这种错误会导致流量损失,甚至错失一些商业机会! 什么?您在自己的网站上遇到了403错误?请立即修复它!但是什么原因导致这种错误?该如何解决?这两个问题都…

66种智能优化算法和改进优化算法优化BP神经网络【开源代码!】【文末福利IT学习资料】

前言 熟话说得好,创新点不够,智能优化算法来凑,不要觉得羞耻,因为不仅我们这么干,很多外国人也这么干!因为创新点实在太难想了,和优化算法结合下是最简单的创新点了! 之前给大家分享…

485通讯抗干扰,超时重发,不断重连的程序架构

485通讯抗干扰,超时重发,不断重连的编程思路 在工程中会遇到一种情况,当通信受到干扰之后,数据超时重发多次,无法被成功发出去,当恢复干扰后,之前发送的指令就被报错清掉了,相当于串口掉线之后,即使短暂时间内通信连上,掉线之后发出的指令也不生效。 为了确保受到干…

OFDM符号周期

OFDM符号周期的确定 OFDM符号周期的确定是一个复杂的过程,需要考虑多个因素。以下是主要的考虑因素和确定步骤: 主要考虑因素 信道特性 多径延迟扩展相干时间 系统要求 数据速率频谱效率 硬件限制 采样率计算复杂度 应用场景 移动性要求覆盖范围 …

spark shuffle写操作——SortShuffleWriter

写入的简单流程: 1.生成ExternalSorter对象 2.将消息都是插入ExternalSorter对象中 3.获取到mapOutputWriter,将中间产生的临时文件合并到一个临时文件 4.生成最后的data文件和index文件 可以看到写入的重点类是ExternalSorter对象 ExternalSorter 基…

Vant Ui 最新访问地址

Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. 顺带一个顶部导航栏正常写法 先使用吸顶为0&#xff0c;然后再写nav-bar <van-sticky :offset-top"0"> <van-nav-bar class"top-title" title"村集体土地公示&q…

对为什么react需要时间分片,vue3不需要的浅学习

1、时间分片 时间分片指在让应用在cpu进行大量计算时也能与用户交互&#xff0c;但时间分片只能对大量cpu计算进行优化&#xff0c;无法优化复杂DOM操作&#xff0c;因为要确保用户正在操作的界面是最新。 web卡顿的场景&#xff1a; 1、cpu计算量不大&#xff0c;但dom操作…

人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作与代码详解。OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它提供了各种视觉处理函数&am…

Redis为什么变慢了?一文讲透如何排查Redis性能问题

Redis 作为优秀的内存数据库&#xff0c;其拥有非常高的性能&#xff0c;单个实例的 OPS 能够达到 10W 左右。但也正因此如此&#xff0c;当我们在使用 Redis 时&#xff0c;如果发现操作延迟变大的情况&#xff0c;就会与我们的预期不符。 你也许或多或少地&#xff0c;也遇到…

以太网中的各种帧结构

帧结构&#xff08;Ethernet Frame Structure&#xff09;介绍 以太网信号帧结构&#xff08;Ethernet Signal Frame Structure&#xff09;&#xff0c;有被称为以太网帧结构&#xff0c;一般可以分为两类 —— 数据帧和管理帧。 按照 IEEE 802.3&#xff0c;ISO/IEC8803-3 …

短视频矩阵管理系统:如何提升内容质量,帮助企业获客?

在数字化营销蓬勃发展的今天&#xff0c;短视频已成为企业推广的重要阵地。然而&#xff0c;如何高效管理短视频内容&#xff0c;提升内容质量&#xff0c;进而帮助企业精准获客&#xff0c;成为企业亟待解决的问题。短视频矩阵管理系统应运而生&#xff0c;以其强大的功能和灵…

TCP/IP协议超时重传,以及应用层超时重传一文详解

很多人会有这样的疑问 TCP/IP协议内置了超时重传的功能&#xff0c;那为什么连接完全断开或超时时&#xff0c;应用层代码段还会进行重传处理呢&#xff1f; TCP协议的重传机制 客户端 服务器| ||---- 数据段1 --…

编程范式之并发编程

目录 前言1. 并发编程的定义2. 并发编程的特点2.1 任务交替执行2.2 状态共享与同步2.3 并行执行 3. 并发编程的适用场景3.1 高性能计算3.2 I/O 密集型应用3.3 实时系统 4. 并发编程的优点4.1 提高资源利用率4.2 缩短响应时间4.3 提高系统吞吐量 5. 并发编程的缺点5.1 编程复杂性…

硬盘模式vmd怎么改ahci_电脑vmd改ahci模式详细步骤

最近有很多网友问&#xff0c;我新买的电脑安装原版win10或win11找不到驱动器呀&#xff0c;进入第三方pe又找不到硬盘&#xff0c;找到硬盘安装后又出现安装蓝屏的情况&#xff0c;新机器怎么回事呀&#xff1f;这位网友内心有点崩溃&#xff0c;不知道啥原因。其实这些都是由…

初识c++(类与对象——上)

一、类的定义 1、类定义格式 • class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省 略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或 者成员函…

损失函数 - Transformer教程

在人工智能和深度学习的领域&#xff0c;Transformer模型已经成为了非常流行的选择。而在Transformer模型的训练过程中&#xff0c;损失函数扮演了至关重要的角色。今天&#xff0c;我们就来深入探讨一下什么是损失函数&#xff0c;以及它在Transformer中的应用。 什么是损失函…