JVM----GC(垃圾回收)详解

news2025/1/12 18:17:11

一、Automatic Garbage Collection(垃圾回收)简介

Automatic Garbage Collection (自动垃圾回收)是JVM的一个特性,JVM会启动相关的线程,该线程会轮训检查heap memeory,并确定哪些是未被引用的(unreferenced),即未被使用的;哪些是被引用的(referenced),即正在使用的。
在C/C++语言中,对象内存的分配与回收,是手动进行分配与回收的,而在JVM中,JVM会使用垃圾回收器(一个线程),来自动对内存进行分配与回收。

二、GC基本机制简介

GC机制中,最常见最基本的方案是标记–清除法(Marking–Deletion),示例如下:

Step 1 : Marking

在垃圾回收机制中第一步通常是标记(Marking) ,该标记用于确认哪些是被引用的,标记哪些是未被引用的。
在这里插入图片描述
被引用的对象被标记为蓝色,未被引用的对象被标记为黄色。所有的对象都会被扫描用于做标记,有的时候该操作会非常耗时。

Step 2 :Normal Deletion

该节点会删除未被标记的对象,用于释放内存空间。
在这里插入图片描述

Step 2a : Deletion with Compacting

为了进一步提高性能,除了删除未引用的对象外,还可以压缩剩余的引用对象。通过将引用的对象移动到一起,这使得新的内存分配更加容易和快捷。
在这里插入图片描述

三、JVM Generations

为了提升JVM的性能,堆(heap memory )被分解为更小的部分或代(generations),即Young Generation, Old or Tenured Generation, and Permanent Generation。示例图如下:
在这里插入图片描述
Young Generation是新对象被分配的内存区域,并被标记上年龄值。当Young Generation内存空间被充满,将会触发一次minor garbage collection(触发的条件根据选择的垃圾回收器不同而不同)。minor garbage collection可以通过相关设置值来优化; 如果Young Generation中都是未被使用的对象(dead object),minor garbage collection效率会非常高,垃圾回收会很快。一些幸存的object会被标记年龄值,并最终转移到Old or Tenured Generation(老一代)。
Stop the World Event 每一次minor garbage collection 都会触发“Stop the World Event ” 事件,这会导致应用中所有的线程会暂停,知道该垃圾回收操作完成。
Old Generation 会存储长期存活的object,一般的,会给对象的年龄值设置一个临界点,当对象的年龄值达到该临界点的时候,会被移到 Old Generation,最终当 Old Generation内存空间充满的时候会触发一次major garbage collection。
Major garbage collection 也会触发“Stop the World Event ” 事件,Major garbage collection会非常慢,因为这涉及所有的 对象。
Permanent Generation 会存储一些JVM运行所需要的元数据,这些元数据描述了classes(类)、methods(方法)等。

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

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

相关文章

滚动菜单 flutter

想实现这个功能: 下面的代码可以实现: import package:flutter/material.dart;void main() > runApp(MyApp());class MyApp extends StatelessWidget {static const String _title Flutter Code Sample;overrideWidget build(BuildContext context)…

【MySQL】CRUD (增删改查) 基础

CRUD(增删改查)基础 一. CRUD二. 新增 (Create)1. 单行数据 全列插入2. 多行数据 指定列插入 三. 查询(Retrieve)1. 全列查询2. 指定列查询3. 查询字段为表达式4. 别名5. 去重:DISTINCT6. 排序…

【算法】希尔 (Shell) 排序 详解

希尔排序 详解 希尔排序代码实现 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录&#x…

生信豆芽菜-机器学习筛选特征基因

网址:http://www.sxdyc.com/mlscreenfeature 一、使用方法 1、准备数据 第一个文件:特征表达数据 第二个文件:分组信息,第一列为样本名,第二列为患者分组 第三个文件:分析基因名 2、选择机器学习的方…

[学习笔记]CS224W

资料: 课程网址 斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】 斯坦福大学CS224W图机器学习公开课-同济子豪兄中文精讲 图的基本表示 图是描述各种关联现象的通用语言。与传统数据分析中的样本服从独立同分布假设不一样,图数据自带关联…

学习SpringMvc第二战之【SpringMVC之综合案例】

目录 一. 参数传递 1.前期准备工作(替换pom.xml中的部分依赖) 1.1将log4j替换成为slf4j(将打印语句替换成为日志文件输出结果) 2.正式操作 1.基础传参 1.1创建方法,用于验证传参 1.2构建界面回显 1.3设置访问路径(localho…

【PHP代码审计】反序列化漏洞实战

文章目录 概述资源下载地址Typecho代码审计-漏洞原理call_user_func()_applyFilter()、get()与__get__toString()__construct()install.php POC利用漏洞利用复现利用链执行phpinfo()GET利用POST利用 getshell生成payload漏洞利用蚁剑连接 总结 概述 序列化,“将对象…

污水处理厂3D数字孪生三维可视系统降低设备风险隐患

当相对传统与保守的水务行业,与激进与开放的互联网发生碰撞之后,产生了最好的一个名词是:“智慧水务”,谈及智慧水务,自然免不了当下最具热度的技术“元宇宙”,水资源再生是我国追求高质量发展的新策略&…

fastadmin列表,关联筛选查询

fastadmin文章表关联分类表,分类筛选默认按分类名模糊查询,项目需求是下拉选择分类,根据分类id直接筛选。最终效果如下图。 var table $("#table");//在普通搜索渲染后table.on(post-common-search.bs.table, function (event, ta…

Elasticsearch脑裂

文章目录 Elasticsearch脑裂 Elasticsearch脑裂 Elasticsearch脑裂是指由于网络分区或节点间通信故障导致集群中的节点无法互相正常通信,从而导致数据不一致的情况。这可能会导致集群中的多个节点同时自认为是主节点(master),并开…

mysql(十)mysql主从复制--主库切换

概述 可能为了更迭升级服务器,或者主库出现问题,又或者只是希望重新分配容量,此时需要切换主库。 如果这是计划内的切换,会相对容易点。只需要在从库上使用CHANGE MASTER TO命令,并设置合适的值。大多数的值都是可选…

大数据技术之Hadoop:使用命令操作HDFS(四)

目录 一、创建文件夹 二、查看指定目录下的内容 三、上传文件到HDFS指定目录下 四、查看HDFS文件内容 五、下载HDFS文件 六、拷贝HDFS文件 七、HDFS数据移动操作 八、HDFS数据删除操作 九、HDFS的其他命令 十、hdfs web查看目录 十一、HDFS客户端工具 11.1 下载插件…

OpenWrt系统内核设置

系统内核设置:OpenWrt也是一个 Linux 操作系统,因此它和其他Linux 操作系统一样, 可以通过一些配置文件配置。 一、/etc/sysctl.conf 配置文件 这个文件是系统启动预加载的内核配置文件,通过sysctl命令读取和设置到系统当中。这个…

openGauss学习笔记-62 openGauss 数据库管理-两地三中心跨Region容灾

文章目录 openGauss学习笔记-62 openGauss 数据库管理-两地三中心跨Region容灾62.1 基于流式复制的异地容灾解决方案62.1.1 概述62.1.2 规格与约束62.1.2.1 特性规格62.1.2.2 特性约束 62.1.3 影响容灾性能指标的GUC参数设置62.1.3.1 检查点相关参数设置的影响62.1.3.2 极致RTO…

android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程

官网参考链接:https://developer.android.google.cn/develop/ui/views/appwidgets/overview 1、什么是小部件 App widgets are miniature application views that can be embedded in other applications (such as the home screen) and receive periodic updates…

LED显示屏安全亮度参数设置方法和防护

随着LED显示屏应用领域越来越广,但其高亮度造成的光污染,常受到的人们的诟病。为了更好的避免光污染,我整理了一些关于LED显示安全亮度参数设置方法和安全防护措施。你知道LED广告牌是如何工作的吗? 设置LED显示屏的安全亮度参数和…

android上架备案公钥和md5获取工具

最近很多公司上架遇到了一个问题,就是要提供app的备案证明,现在android上架都需要备案了,但是我们的证书都是通过工具生成的,哪里知道公钥和md5那些东西呢?无论安卓备案还是ios备案都需要提供公钥和md5。 包括ios的备案…

ChatGPT Prompting开发实战(五)

一、如何编写有效的prompt 对于大语言模型来说,编写出有效的prompt能够帮助模型更好地理解用户的意图(intents),生成针对用户提问来说是有效的答案,避免用户与模型之间来来回回对话多次但是用户不能从LLM那里得到有意义的反馈。本文通过具体…

异步请求库的实际应用案例:爬取豆瓣经典电影

在日常爬虫过程中,你有没有遇到过需要爬取大量数据的情况,但是传统的同步请求方式让您等得焦头烂额? 这个问题的根源在于传统的同步请求方式。当我们使用同步请求时,程序会一直等待服务器的响应,直到数据返回后才能继续…

Jmeter性能测试手册

目录 目录 2 简介... 4JMeter与LoadRunner区别... 4环境配置... 5 3.1 安装JDK. 5 3.2 配置JDK环境变量... 9 3.3 安装并配置Maven. 13 3.4 下载JMeter 15 JMeter分类使用... 16 4.1 对于Dubbo类接口的测试.. 16 4.1.1 安装开发工具IDEA. 16 4.1.2 配置字符集格式…