java gc垃圾回收机制(垃圾收集 Garbage Collection)

一文带你深入JAVA GC(垃圾回收机制)面试讲解!!! - 知乎

gc常用算法

gc常用算法有:标记-清除算法标记-压缩算法复制算法分代收集算法。

复制算法(Java中新生代采用)

缺点:

  • 复制算法的代价是将系统内存折半,一般情况下很难让人接受。
  • 对于存活对象较多的情况,效率不能保证

标记清除法(Mark-Sweep)

缺点:

标记清除算法回收后的控件时不连续的,会产生空间碎片,在对象的堆空间分配过程中,尤其是大对象的分配,不连续内存空间的工作效率要低于连续的空间。

目前主流的JVM(HotSpot)采用的是分代收集算法。

gc的对象

需要进行回收的对象就是已经没有存活的对象,判断一个对象是否存活常用的有两种办法:引用计数和可达分析。

(1)引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。

(2)可达性分析(Reachability Analysis):从gc roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到gc roots没有任何引用链相连时,则证明此对象是不可用的。不可达对象。

标记压缩清除法(Java中老年代采用)

分为三个阶段:标记阶段,压缩阶段,清除阶段

标记阶段和清除阶段不变,只不过增加了一个压缩阶段,就是在做完标记阶段后, 将这些标记过的对象集中放到一起,确定开始和结束地址,比如全部放到开始处,这样再去清除,将不会产生磁盘碎片。

压缩阶段占用了系统的消耗,并且如果标记对象过多的话,损耗可能会很大,在标记对象相对较少的时候,效率较高。

gc在什么时候,对什么东西,做了什么事情。

在什么时候?

程序员不能具体控制时间,系统在不可预测的时间调用System.gc()函数的时候

对什么东西?

从GC Roots搜索不到,而且经历过一次标记清理之后仍然没有复活的对象。

GC Roots都有哪些:

1.虚拟机栈中的引用的对象

2.方法区中静态属性引用的对象

3.常量引用的对象

4.本地方法栈中JNI(即一般说的native方法引用的对象

做什么?

新生代:复制清理;

老年代:标记-清除和标记-压缩算法

永久代:存放Java中的类和加载类的类加载器本身

  • Major GC 是清理老年代。
  • Full GC 是清理整个堆空间—包括年轻代和老年代。

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

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

相关文章

java--子类构造器的特点

1.子类构造器的特点 子类的全部构造器,都会先调用父类的构造器,再执行自己。 2.子类构造器是如何实现调用父类构造器的 ①默认情况下,子类全部构造器的第一行代码都是super()(写不写都有),它会调用父类的无参数构造器。 ②如果…

【攻防世界-misc】来自银河的信号

1.下载并打开文件,是个音频软件 2.由于打开音频出现的声音类似于无线波,因此需要用RX-SSTV工具打开, RX-SSTV代表“接收图像慢扫描电视”的意思。慢扫描电视是一种通过无线电进行图像传输的技术,通常用于业余无线电领域。RX-SST…

分治法之归并排序

思路: 将待排序数组分成两个子数组,计算中间位置mid。对左半部分进行递归排序,得到一个有序的子数组。对右半部分进行递归排序,得到另一个有序的子数组。合并两个有序的子数组,得到一个完整的有序数组。 示例图: 代码: #include&…

JAVA 算法面试总结

1、二分查找 二分查找又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置 的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小, 则在后半部分循环…

【ONE·Linux || 网络基础(四)】

总言 主要内容:传输层UDP、TCP协议基本介绍。UDP报文格式、TCP报文格式、三次握手四次挥手、TCP可靠性策略说明。 文章目录 总言8、UDP协议(传输层一)8.1、传输层预备知识8.1.1、端口号8.1.2、一些指令(netstat、pidof、xargs&am…

热烈欢迎省工信厅毛郑建处长莅临公司调研指导工作

2023年11月28日,河南省工信厅信息化和软件服务业处毛郑建处长莅临郑州埃文计算机科技有限公司(以下简称“埃文科技”)调研考察工作。河南省工业信息安全产业发展联盟理事长任传军陪同调研。 首先,埃文科技董事长王永向毛处长介绍埃…

优维全新低碳产品亮相SBE23 Asia-Pacific绿色建筑促进碳中和论坛

2023年11月23日—24日,由深圳市人民政府主办,深圳市住房和建设局、深圳市发展与改革委员会、深圳市龙岗区人民政府承办,深圳市绿色建筑协会作为执行单位的“2023年可持续建筑环境亚太地区会议(SBE23 Asia-Pacific)”在…

Ubuntu Server 20.04.6安装Anaconda3

下载安装包 去下面的网页找到自己想要安装的对应版本的链接: https://repo.anaconda.com/archive/ 我安装的版本链接如下: https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh 复制这个链接后使用如下命令下载: wget …

一篇文章带你掌握MongoDB

文章目录 1. 前言2. MongoDB简介3. MongoDB与关系型数据库的对比4. MongoDB的安装5. Compass的使用6. MongoDB的常用语句7. 总结 1. 前言 本文旨在帮助大家快速了解MongoDB,快速了解和掌握MongoDB的干货内容. 2. MongoDB简介 MongoDB是一种NoSQL数据库,采用了文档…

arthas使用

官方文档 Github: https://github.com/alibaba/arthas 文档: https://arthas.aliyun.com/doc/ Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断…

C语言从入门到实战——常用字符函数和字符串函数的了解和模拟实现

常用字符函数和字符串函数的了解和模拟实现 前言1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现4. strcpy的使用和模拟实现5. strcat的使用和模拟实现6. strcmp的使用和模拟实现7. strncpy函数的使用8. strncat函数的使用9. strncmp函数的使用10. strstr的使用和模拟…

MatchPyramid实现文本匹配

引言 今天利用MatchPyramid实现文本匹配。 原论文解析→点此←。 MatchPyramid 核心思想是计算两段文本间的匹配矩阵,把它当成一个图形利用多层卷积网络提取不同层级的交互模式。 匹配矩阵是通过计算两段输入文本基本单元(比如字或词)之间相似度得到的&#xf…

43.0BaseDao抽取dao公共父类

43.1. 回顾 1. 把数据库表中查询的结果封装到一个实体类中。 命名规则:类名和表名一致 类中属性和表的字段对应。 表中的一条记录对应实体的一个对象 多条记录→集合 43.2. 正文 目录 43.1. 回顾 43.2. 正文 43.3. 抽取dao公共父类。 43.4. 引入数据源 43.3. 抽取dao公共…

C#测试开源运行耗时库MethodTimer.Fody

微信公众号“dotNET跨平台”的文章《一个监控C#方法运行耗时开源库》介绍了支持测量方法耗时的包MethodTimer.Fody,使用方便,还可以自定义输出信息格式。本文学习并测试MethodTimer.Fody包的使用方式。   新建控制台程序,通过Nuget包管理器…

Python链式调用技巧:代码流畅无缝连接

更多资料获取 📚 个人网站:ipengtao.com 链式调用是一种编程风格,它允许将多个方法调用连接在一起,形成一个连贯的操作链。在Python中,链式调用常常用于使代码更简洁、易读,尤其在处理数据处理和函数式编程…

web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)

题目 打开页面显示如下 只有这个页面能打开 显示如下 用dirsearch扫一下 查看了一下,发现没什么用 查看页面源代码 返回了,写入的参数,猜测可能有文件包含漏洞 用php伪协议读取文件 构造payload ?pagephp://filter/readconvert.base64-en…

WordPress定时文章自动发布技巧

对于许多WordPress站长来说,文章的管理和发布计划往往是一个头疼的问题。随着内容的不断增加,时间表的调整以及发布频率的把握成为了让人焦头烂额的挑战。 一、时间管理难题 对于博客管理员来说,时间管理一直是个令人困扰的问题。在忙碌的生…

Springboot-注册注解【springboot常用注解】

1.组件注册 1.1 使用的注解 Configuration:普通配置类,替代以前的配置文件,配置类本身也是容器的组件|SpringBootConfiguration:Springboot配置类,与Configuration功能一样|Bean:替代以前的Bean标签,如果没有在Bean标签内定义名字,则默认组件的名字为方法名,可以直接修改注解…

简单0成本构建一个企业内部的视频点播、培训直播、安防监控、录像管理于一体的数字视频管理体系

以前,企业要构建一套数字化的视频管理体系,把企业内部的各种视频文件、直播培训、安防监控视频都整合到一套流媒体音视频服务里面,实现统一的对外供货、对外赋能的方案,是很困难的!因为,原来这都是好几个项…

【Web】NewStarCTF Week4 个人复现

目录 ①逃 ②More Fast ③midsql ④InjectMe ⑤PharOne ⑥flask disk ①逃 一眼字符串逃逸 bad 替换为 good 字符增加一位 先构造一下试试 <?php class GetFlag {public $key;public $cmd "ls /";} $a new GetFlag(); echo serialize($a); 得到O:7:…