系列一、堆里面的分区:Eden、From、To、老年代各自的特点

一、堆里面的分区:Eden、From、To、老年代各自的特点

        堆是对象共享的区域,也是垃圾回收器主要工作的地方。主要分为新生区、养老区和元空间,而这三块地方中GC主要工作在新生区和养老区,其中新生区占1/3、养老区占2/3,新生区又分为伊甸区和幸存者区,幸存者区又分为幸存者0区(From区),幸存者1区(to区),内存所占比例是8:1:1。垃圾回收主要有四大算法,分别是:1、引用计数器法  2、复制算法   
3、标记清除算法  4、标记压缩算法。
 
1、引用计数器法:
     工作原理:每次对对象的引用都维护一个计数器,当该对象的计数器为0的时候,说明没有引用指向该对象了,GC可以对该对象的内存空间进行回收了。
     缺点:(1)较难处理循环引用;
               (2)每次对对象的引用都需要维护引用计数器,且维护计数器本身也有一定的消耗;
 
2、复制算法:
     工作原理:首先,当伊甸区满的时候会第一次触发GC,把还活着的对象拷贝到From区,当伊甸区再次满的时候,第二次触发GC,这时候GC会扫描伊甸区+From区,对这两个区域进行垃圾回收,经过这次回收后还存活的对象,则直接复制到To区,同时把这些对象的年龄+1。
     备注:如果有对象的年龄到达了老年的标准,则复制到老年代区。   
 
     其次,清空伊甸区和From区中的对象。经过这次清空之后,原本的From区里边为空,变为了To区
     最后,To区和From区互换,原来的To区成为下一次GC时的From区。
     优点:不会产生内存碎片;
     缺点:GC第二次扫描拷贝存活的对象时,会导致内存减半
 
 
3、标记清除算法:
     标记清除一般发生在老年代。分为2个阶段:先标记出要回收的对象,然后统一回收这些对象。
     同通俗的话解释一下标记清除算法,是指程序运行期间,若可以使用的内存即将被耗尽时,GC线程将会被触发并将程序暂停,随后将要清除的对象标记一遍,最终统一回收这些对象,完成标记清理工作接下来便让应用程序恢复运行。
     
     两个阶段  
     标记:从引用根节点开始标记遍历所有的GC Roots,先标记出要回收的对象;
     清除:遍历整个堆,把标记的对象清除;
 
     缺点:此算法需要暂停整个应用,会产生内存碎片。
     
 
4、标记压缩算法:
     在整理压缩阶段,不再对标记的对象回收,而是将所有存活着的对象都向一端移动,然后直接清除边界以外的内存。可以看到标记的存活对象将会被整理,按照内存地址依次排列,而未被标记的内存将会被整理掉。如此一来,当我们需要给新对象分配内存时,JVM只需要持有一个内存的起始地址即可,这比维护一个空闲列表显然少了许多开销。
     优点:标记压缩算法不仅可以弥补标记清除算法中,内存区域分散的特点,也消除了复制算法当中,内存减半的高额代价。
     缺点:比复制算法多了一个标记的阶段,又比标记/清除多了一个整理内存的过程。

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

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

相关文章

springboot+activiti5.22.0集成Activiti在线流程设计器

SpringBoot集成Activiti5.22在线流程设计器 文章目录 SpringBoot集成Activiti5.22在线流程设计器📝1.增加配置pom依赖 增加数据库及redis配置文件📜 2.启动类ActivitiDesignApplication排除安全校验注解启动项目后将会自动在数据库中生成表 &#x1f4d8…

Win11+Modelsim SE-64 10.6d搭建UVM环境

1、添加源文件及tb文件 在目录下建立文件夹,将DUT和Testbench添加进去,文件夹内容如下所示: 2、以《UVM实战》中的例子做简单的示例: 2.1 设计文件 :dut.sv 功能很简单,即将接受到的数据原封不动发送出去…

鸿蒙:Harmony开发基础知识详解

一.概述 工欲善其事,必先利其器。 上一篇博文实现了一个"Hello Harmony"的Demo,今天这篇博文就以Demo "Hello Harmony" 为例,以官网开发文档为依据,从鸿蒙开发主要的几个方面入手,详细了解一下鸿…

谈谈 MySQL 事务隔离级别

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

Maven依赖管理项目构建工具(保姆级教学---上篇)

对于Maven依赖管理项目构建工具的介绍,我们将其分为上篇和下篇。如果您对文章感兴趣,您可以在此链接中找到下篇详细内容: Maven依赖管理项目构建工具(保姆级教学---下篇)-CSDN博客 一、Maven介绍 官网地址&#xff…

R语言的入门学习

目录 准备工作导入csv数据集选择前200行作为数据集展示数据集的前/后几N行宏观分析删除缺失值构建直方图导出为图片 R语言常见图像类型例1:散点图例2:散点矩阵图 准备工作 安装教程: R语言和RStudio的下载安装(非常简便舒适&…

大模型是怎么知道 “我赚了200万” 的?

今天在和 chatGPT 聊天时,我说“我赚了200万”,他立刻就根据这句话给我了一句。 我当然没有赚到200万,只是想引出一个话题:“大模型是如何识别出这句话,又是怎么知道该回答什么的呢?" 在学习自然语言…

GIS杂记(三):MaxEnt模型中的图像地理范围不匹配【全网最好的方法,没有之一】

图像地理范围不匹配问题解决方法 1. 问题描述2. 问题范例3. 问题解决4. 其他参考 1. 问题描述 一般在使用全国的的生物气候变量时,由于其地理范围一致,因此不会出现地理范围不匹配的问题。但是,当加入其他影响因子的时候,如海拔、…

mongodb——原理简介,docker单机部署

MongoDB noSQL数据库 特点 数据文件存储格式为 BSON (JSON 的扩展) {“name”:“joe”}这是 BSON 的例子,其中"name"是键,"joe"是值。键值对组成了 BSON 格式。面向集合…

BUUCTF [BJDCTF2020]你猜我是个啥 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 来源:https://github.com/BjdsecCA/BJDCTF2020 密文: 下载附件,得到一个zip压缩包。 解题思路: 1、尝试解压压缩包,提示“attachment_10.zip”不是压缩文…

【考研数学神作】你不能错过的学习教材

【文末送书】今天推荐一些考研数学优质书籍,带你筑牢知识体系 目录 导语优美的数学思维:问题求解与证明数学分析线性代数线性代数及其应用代数初等数论及其应用数论概论概率论基础教程概率论与统计推断统计学基础:透过数据看世界数理统计及其…

R语言和RStudio的下载安装(非常简便舒适)

目录 R语言和RStudio的关系R语言和Tableau下载R语言进入官网选择清华镜像源Download R for Windows选择base版本开始下载进行安装配置环境变量检查是否安装成功 下载RStudio进入官网点击下载进行安装检查是否安装成功打开选择R语言环境成功打开显示四个工作区 R语言和RStudio的…

画中画视频剪辑:批量制作画中画视频,让视频更具吸引力和创意

在今天的视频制作环境中,画中画视频剪辑技术已经成为了一种主流。它不仅能增加视频的视觉吸引力,也可以提升观看体验。画中画视频剪辑是一种制作多个视频画面的技术,它可以将两个或更多的视频画面融合在一起,形成一个全新的视频。…

【数据挖掘 机器学习 | 时间序列】时间序列必学模型: ARIMA超详细讲解

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

获取文章分类详情

CategoryController GetMapping("/detail")public Result<Category> detail(Integer id){Category c categoryService.findById(id);return Result.success(c);} CategoryService //根据id查询分类信息Category findById(Integer id); CategoryServiceImpl …

Pandas分组聚合_Python数据分析与可视化

Pandas分组聚合 分组单列和多列分组Series 系列分组通过数据类型或者字典分组获取单个分组对分组进行迭代 聚合应用单个聚合函数应用多个聚合函数自定义函数传入 agg() 中对不同的列使用不同的聚合函数 分组聚合的流程主要有三步&#xff1a; 分割步骤将 DataFrame 按照指定的…

【开源】基于Vue和SpringBoot的康复中心管理系统

项目编号&#xff1a; S 056 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S056&#xff0c;文末获取源码。} 项目编号&#xff1a;S056&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员…

【如何将任何直流电机变成伺服电机】

【如何将任何直流电机变成伺服电机】 1 前沿2 伺服电机工作原理3 如何制作定制伺服电机4 AS5600 编码器 – 磁性旋转位置传感器5 定制伺服电机电路图6 PCB设计7 自定义伺服3D模型8 定制伺服齿轮箱的 3D 打印零件9 对控制器进行编程9.1 引导加载程序刻录9.2 代码上传9.3 源代码9…

YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进【NO.79】改进损失函数为VariFocal Loss

前言 作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&#xff0c;将重点对YOLOv8的如何改进进行详细的介绍&…

linux如何重置root密码

目录 当我们想要重置root管理员密码时&#xff0c;我们可以有两种方法进行&#xff1a; 方法一、init方法 1、重启系统&#xff0c;在下图所示界面按e键 2、随后进入以下界面&#xff0c;、将ro修改为rw&#xff0c;在行末尾添加init/bin/sh。​编辑 3、随后按Ctrlx启动到s…