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…

linux 内核工作队列

工作队列( work queue)是使用内核线程异步执行函数的通用机制。 工作队列是中断处理程序的一种下半部机制,中断处理程序可以把耗时比较长并且可能睡眠的函数交给工作队列执行。 工作队列不完全是中断处理程序的下半部。内核的很多模块需要异步…

android NDK相关,调用C库,JNI,交叉编译,跨平台

首先就是库给我,我先进行开发(按照文档),最后进行交叉编译ARM平台。 遇到的问题:我要看到代码效果,所以必须要在真机上跑代码,那么我调用的库就必须是我这个平台适用的,有两种方式&…

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

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

保存防火墙的规则和自定义链

保存防火墙的规则 将iptables的规则导入开机自启的文件里做脚本使用&#xff0c;就算iptables -F删除&#xff0c;重启就能恢复了 iptables-save #查看当前的所有规则 iptables -save > 保存规则的文件 #保存规则 iptables -restore < 保存的规则文件#重新导入规则 在当…

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

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

Ubuntu Server 20.04.6安装Anaconda3

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

一篇文章带你掌握MongoDB

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

react hooks学习之useMemo和useCallback

useMemo和useCallback的用法以及区别 useCallback 和 useMemo 是 React 中的两个钩子函数&#xff0c;它们的目标都是优化性能&#xff0c;但它们在用途和使用场景上有一些区别。 useCallback useCallback 用于缓存一个回调函数&#xff0c;并在依赖项发生变化时&#xff0c…

arthas使用

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

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

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

Json示例

这里写目录标题 CjsonC JSonQT json Cjson #include <stdio.h> #include <stdlib.h> #include "cjson.h" // 向JSON对象中添加数据 cJSON_AddStringToObject(root, "name", "John"); cJSON_AddNumberToObject(root, "age&…

Redis 数据恢复方式说明

AOF日志 AOF(Append Only File)是写后日志,Redis先执行命令把数据写入内存,然后才记录日志。 实现原理 AOF 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的。 示例: set testkey testvalue 对应AOF文件 *3 $3 set $7 testkey $9 testvalue “*3”表示…

MatchPyramid实现文本匹配

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

【0241】Parser解析分析统计信息(PARSE ANALYSIS STATISTICS)

1. 执行解析分析 PG内核通过调用pg_parse_query()函数,完成用户查询字符串的解析任务。并返回List类型的参数parsetree_list。如下所示: $4 = {type = T_List, length = 1, max_length = 1, elements = 0x1fc72e0, initial_elements = 0x1fc72e0}之后运行原始解析树并处理每…

Java作业题记录

loading... 1.定义一个Person类{name, age, job},初始化Person对象数组&#xff0c;有3个person对象&#xff0c;并按照 age 从 大到 小进行排序,提示&#xff0c;使用冒泡排序Homework01.java 难点1&#xff1a;初始化数组Person[] people new Person[3]; 难点2&#xff…