图解使用两块 Survivor 区的原因

2023-10-26

如果只使用一块 Survivor 区:

当发生一次 Minor GC 时,回收 Eden 区的垃圾,把存活的对象复制到 Survivor 区,如下图:

ok,目前看起来并没有什么区别。但是当发生第二次 Minor GC 时,问题就出现了。我们来看一下,第二次 Minor GC 时发生了什么:

如果此时发生 Minor GC:

会出现这种情况:

很明显,这样会出现内存碎片化,这样会严重影响到性能。而且 Survivor 区得不到充分利用,很快就会被填满,而使对象存入老年代,这样会使 Full GC 发生的更加频繁,进而影响性能。


使用两块 Survivor 区:

此时发生 Minor GC:

然后,重点来了。复制完成后,交换 Survivor0 与 Survivor1:

程序继续运行至下图情况时:

此时再次发生 Minor GC 时,会发生如下情况:

复制完成后,再次交换 Survivor0 与 Survivor1:

 

由此看出,这样一来就保证了内存不会出现碎片化,能被充分利用。


参考文章:https://blog.csdn.net/antony9118/article/details/51425581

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图解使用两块 Survivor 区的原因 的相关文章

随机推荐

  • 【深度学习】一分钟速学

    非极大抑制 NMS的英文是Non maximum suppression的缩写 简单的说 就是模型给出了多个重叠在一起的候选框 我们只需要保留一个就可以了 其他的重叠的候选框就删掉了 效果可见下图 交并比 IoU的英文全称Interp ov
  • 远程控制医疗行业应用解析:如何满足医院合规需求?

    远程控制医疗行业应用解析 如何满足医院合规需求 作为一个起源于IT行业的技术 以远程桌面为基础的远程控制技术目前在医疗领域也已经有了比较广阔的应用前景 尤其是在医疗数字化系统 设备的远程运维场景 已经有了一些成功案例 可以说是一个成熟的技术
  • 超详细

    早在去年的十二月份 也就是2020年12月 CentOS 官方发文宣称 CentOS项目的未来是 CentOS Stream 明年我们会将重点从CentOS Linux 转移到CentOS Stream 它紧随当前 RHEL 版本之前 Ce
  • 查找器(Finger)--网络大典

    查找器 Finger 属于用户信息协议 提供了一个与远程用户信息程序接口 RUIP 的界面 Finger 是一种基于传输控制协议 TCP 使用 TCP 端口 79 交换用户信息的协议 在 Finger 端口本机对远程机建立一个 TCP 连接
  • 使用IDEA2021上传代码到Gitee

    1 创建gitee项目仓库 2 复制项目地址 也可以用下面的命令行操作 3 创建本地项目 创建git本地仓库 4 选择目录初始化git 4 1 选择你要上传的项目 4 2 变红说明已经到本地仓库 5 选中项目名先将项目add到缓冲区 再co
  • 【JS逆向】之某条sign算法解析(一)

    声明 本文只作学习研究 禁止用于非法用途 否则后果自负 如有侵权 请告知删除 谢谢 前言 其实这算法网上的解析挺多 但是我感觉大多数不愿意讲的太详细 但是我刚开始玩逆向的时候 我也研究得似懂非懂的 后来还是花了很多时间去研究和调试吧 其实逆
  • 重写了Servlet的init方法后一定要记得调用父类的init方法

    Override public void init ServletConfig config throws ServletException 重写了Servlet的init方法后一定要记得调用父类的init方法 否则在service doG
  • 我开游戏要用什么服务器比较好

    随着互联网的高速发展 游戏行业也随之火爆 那么该怎么选择服务器来保障自身的游戏业务正常运转呢 市场上的服务器大致分为云服务器和物理服务器 云服务器是由大型功能强大的物理设备中分割出来的 是一种简单高效 安全可靠 处理能力可弹性伸缩的计算服务
  • 使用 FPGA 评估板学习 VHDL

    特点 使用 Arrow 经济实惠且适合面包板的 FPGA 开发板 BeMicro MAX 10 创建光传感器 温度传感器 运动传感器和汽车显示器 学习 FPGA 和电子学背后的理论 包括理解正在发生的事情所需的数学和逻辑 了解什么是 FPG
  • 写一个0-10000偶数和

    以下是一个计算0到10000的所有偶数的和的程序 sum 0 for i in range 0 10001 2 sum i print 0 10000的偶数和为 sum 答案为 250050
  • C++ 用libcurl库进行http通讯网络编程

    目录索引 一 LibCurl基本编程框架 二 一些基本的函数 三 curl easy setopt函数部分选项介绍 四 curl easy perform 函数说明 error 状态码 五 libcurl使用的HTTP消息头六 获取http
  • 基于Flask的模型部署

    基于Flask的模型部署 一 背景 Flask 一个使用Python编写的轻量级Web应用程序框架 首先需要明确模型部署的两种方式 在线和离线 在线 就是将模型部署到类似于服务器上 调用需要通过网络传输数据 再将结果返回 离线 就是将模型直
  • 前天 和分公司负责人聊天 他觉得进度慢 员工还疲惫 还没效益 我说 需要组件式开发 他觉得有道理 我不管别人怎么办了 我打算在osg osgearth基础上开发个平台 或许三五年 或许十年二十年 或许半途而废 谁知道呢
  • 大数据应用实践1:基于开源架构的股票行情分析与预测

    股票市场行情分析与预测一直是数据分析领域里面的重头戏 确切地说IT行业的每一次重大发展的幕后推动者以及新产品 特别是高端产品 的最先尝试者都包含金融行业 特别是证券交易市场 它符合大数据的四大特征 交易量大 频率高 数据种类多 价值高 在本
  • SolidJS——前端新秀框架,性能直逼原生JS

    SolidJS 是什么 SolidJS是一个声明式 高效且灵活用于构建用户界面的 JavaScript 库 Solid 号称拥有 JSX 语法 类似于 React hook 的语法 你可以用现代化的开发方式 获得性能最快的代码 一 性能比较
  • 二分查找的循环条件为什么是left小于等于right,而不是left小于right

    我的疑问是为什么不能是简单的小于 而要加个等于 我们来考虑一下下面这种情况 我们判断整数1是否位于数组a 2 0 1 里面 如果循环条件是left
  • Django解决跨域请求的问题

    自己开发调试django的时候 前端向后端发送请求时每次都会出现跨域请求的问题 但后端向前端传递参数不会报错 记录一下这个问题的解决方案 报错原文 已拦截跨源请求 同源策略禁止读取位于 http localhost 8000 predict
  • 二分法总结

    findN 寻找某个数在递增序列里 找不到返回 1 def findN nums n i 0 j len nums 1 while i lt j middle i j i 2 if nums middle n return True ret
  • Java中对象比较

    如果现在要想确定两个对象是否相等 那么应该比较的是对象的完整信息 而对象的完整信息就是对象的属性 所以所谓的对象比较指的就是两个对象的属性进行比较 对象比较的实现形式一 class Person private String name pr
  • 图解使用两块 Survivor 区的原因

    如果只使用一块 Survivor 区 当发生一次 Minor GC 时 回收 Eden 区的垃圾 把存活的对象复制到 Survivor 区 如下图 ok 目前看起来并没有什么区别 但是当发生第二次 Minor GC 时 问题就出现了 我们来