Java垃圾回收简述

news2024/12/23 18:09:10

什么是Java的垃圾回收?

自动管理内存的机制,负责自动释放不再被程序引用的对象所占用的内存。

怎么触发垃圾回收?

  • 内存不足时:JVM检测到堆内存不足时,无法为新的对象分配内存时,会自动触发垃圾回收。
  • 手动请求: 调用System.gc()或者Runtime.getRuntime().gc(),JVM会尝试进行垃圾回收(不能保证执行)。

怎么判断对象是否为垃圾,是否要被回收?

  • 引用计数法: 为每个对象分配一个引用计数器,每当有一个地方引用它时,计数器加1,引用失效时,计数器减1。为0时表示可以被回收。缺点是不能解决循环引用的问题。
  • 可达性分析: 从Gc Roots出发,向下追溯它们引用的对象,以及这些对象引用的其他对象。如果一个对象到Gc Roots没有任何引用链相连,说明该对象不可达,可以被回收。

GC Roots对象包括:虚拟机栈中引用的对象,本地方法栈中引用的对象,静态属性引用的对象,方法区常量引用的对象。

垃圾回收算法有哪些?

  • 标记清除:通过可达性分析,先标记出所有需要回收的对象,然后再统一回收所有被标记的对象。缺点是效率不高,还会造成大量的碎片空间。
  • 复制:将内存分为两块,分配内存时只使用一块,内存不够时将存活的对象复制到另一块上去,然后将这一块清空。
  • 标记整理:先标记,再将所有存活对象移到到内存的一端。
  • 分代回收:将内存划分为新生代和老年代。新生代经历一次GC后将存活的对象年龄加1,年龄超过一定值就放到老年代去。

垃圾回收器有哪些?

(这里就写几个,多了记不住)

  • Serial收集器(复制算法):串行回收,作用于新生代。单线程,效率高。
  • CMS(Concurrent Mark Sweep)收集器(标记清除):并发回收,作用于老年代。高并发,低停顿。
  • G1收集器(标记整理):并行并发收集器,作用于整个堆,包括新生代和老年代。

CMS和G1的区别

  • 作用范围不一样:CMS作用于老年代,G1作用于新生代和老年代。
  • STW的时间:CMS以最小的停顿时间为目标,G1可预测停顿时间。
  • 算法不一样:CMS是标记清除,G1是标记整理。
  • 垃圾碎片:CMS使用垃圾清除,容易产生内存碎片。G1使用标记整理,没有内存碎片。

什么场景触发Full GC?

Full GC: 对整个堆内存进行回收
触发条件:

  • 直接调用System.gc()或者Runtime.getRuntime().gc(),不能保证立即执行,但会尝试。
  • 新生代垃圾回收时,如果存活的对象无法全部放入老年代,或者老年代空间不足了,就会触发Full GC。
  • 元空间空间不足。

minorGC、majorGC

在这里插入图片描述

  • minorGC:只针对新生代进行回收。Eden空间不足,就会触发minorGc。发生得很频繁,因为新生代中对象生命周期较短,回收效率高。
  • majorGC:主要针对老年代进行回收,但不一定只回收老年代。老年代空间不足就会触发majorGC。

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

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

相关文章

UDP协议【网络】

文章目录 UDP协议格式 UDP协议格式 16位源端口号:表示数据从哪里来。16位目的端口号:表示数据要到哪里去。16位UDP长度:表示整个数据报(UDP首部UDP数据)的长度。16位UDP检验和:如果UDP报文的检验和出错&…

【电路】1.2 电流和电压的参考方向

1.2 电流和电压的参考方向 参考方向就是一个假设的方向(类似中学物理的正方形),选参考方向的原因是电路结构略显复杂, 无法直接看出支路电压、电流的实际方向,参考方向可以任意选择,任意支路电压、电流只有…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【272-284】

272. 包基本介绍 272.1 看一个应用场景 272.2 包的三大作用 272.3 包的基本语法 273. 包原理 274. 包快速入门 在不同的包下面创建不同的Dog类 275. 包命名 276. 常用的包 一个包下,包含很多的类,java 中常用的包有: java.lang.* //lang 包是基本包,默认引入&…

【英语】5. 考研英语语法体系

文章目录 前言句字的成分一、常规句型简单句(5 种)1. 定义:句子中只包含 *一套主谓结构* 的句子。(一个句子只能有一个谓语动词)2. 分类 并列句(由关联词组成)(3 种)基本…

Unity Shader Graph基础包200+节点及术语解释

目录 Master Stack: Vertex block: Fragment block​编辑 Alpha Clip Threshold Dither transparency Graph Inspector Texture 2d Array/Texture 3d Virtual Texture Sampler State Keywords Boolean keyword 右键显示所有节点 简化测试系列节点&#x…

[SpringBoot] 苍穹外卖--面试题总结--上

前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解(一)-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解(二)-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详…

ThreeJS入门(091):THREE.PositionalAudio 知识详解,示例代码

作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,webgl,ThreeJS,canvas&#xf…

二叉树—相关结构

1.相关的结构问题(分治递归) 1.1节点个数 1.2叶子结点个数 叶子结点:没有孩子的节点 1.3树的高度(深度) 1.4二叉树第k层的节点个数 1.5二叉树查找值为x的节点 2.二叉树的创建和销毁 2.1二叉树的构建 二叉树遍历_牛客…

mysql语句执行过程

具体流程如下: 1】当客户端的SOL发送到MySQL时,首先是到达服务器层的连接器,连接器会对你此次发起的连接进行权限校验,以此来获取你这个账号拥有的权限。当你的账号或密码不正确时,会报用户错误。连接成功如果后续没有任何操作&am…

xlwings直接读取使用区域的数据

这里的读取方法,不用最大行号最大列号,直接使用used_range对应的方法 代码如下: import xlwings as xwfile_path r...\AAA.xlsx# 实例化app,打开文件 app_e xw.App(VisibleFalse,add_bookFalse) work_book appe.books.open(f…

New Phytologist | 中国科学院地理所:菌根共生途径塑造树木根经济空间

本文首发于“生态学者”微信公众号! 根经济空间是环境驱动下一系列根属性复杂互作的结果,本质上反映了植物地下碳(“货币”)投资与养分(“商品”)收益的多维策略权衡关系(图1)。然而…

【java】数据类型与变量以及操作符

各位看官:如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论,感谢您的支持!!! 目录 一.字面变量: 二:数据类型 1.1:int类型:&#xff0…

高速机器人的点动与直线运动

工业机器人中的点动和直线运动非常之重要,接下来说一下他们的实现过程。 点动: 点动包括两个部分,第一个点动是每一个关节电机的点动,第二个是机器末端向xyz的三个方向进行点动处理。 第一个点动是非常简单的,即把对…

IO系列-3 NIO基本概念:Buffer和Channel和Selector

1.缓冲区 1.1 Buffer类介绍 java在BIO中通常使用字节数组byte[]和字符数组char[]实现数据传输,在NIO中,引入了缓冲区Buffer进行数据传输,相对数组提供了更多的属性和API.Buffer在java.nio包中引入,Buffer对于常见的类型有对应的…

【C++指南】类和对象(二):类的默认成员函数——全面剖析 :构造函数

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 ​ 阅读本篇文章之前,你需要具备的前置知识:类和对象的基础 点击下方链接 【C指南…

Stable Diffusion的核心插件—ControlNet!万字长文解读!

前言 一、介绍 论文地址:[https://arxiv.org/abs/2302.05543](https://arxiv.org/abs/2302.05543 "https://arxiv.org/abs/2302.05543")代码地址:[GitHub - lllyasviel/ControlNet: Let us control diffusion models!](https://github.com/ll…

Python和C++胶体粒子三维残差算法模型和细化亚像素算法

🎯要点 使用信噪比、对比度噪声比和点扩展函数量化实验数据,增强共聚焦显微镜成像。参考粒子跟踪算法:使用二维和三维径向模型细化亚像素。胶体粒子三维图形分割学习模型模拟检测球形胶体。使用网格搜索优化模型和归一化处理以避免光漂白。 …

idear 控制台乱码、查询结果、参数、控制台乱码

一、 -Dfile.encodingUTF-8 二、 三、 四、 五、

【区间选点】

题目 代码 左端点排序区间合并 #include <bits/stdc.h> using namespace std; #define null -0x3f3f3f3f #define x first #define y second typedef pair<int, int> PII; const int N 1e510; vector<PII> v; int main() {int n;cin >> n;for(int i…

LLM大模型企业应用实战-“消灭”LLM幻觉的利器

大模型一定程度改变了我们生活工作的思考方式&#xff0c;越来越多的个人和企业在思考如何将大模型应用到更加实际的生产生活。 1 LLM的问题 1.1 幻觉 LLM因为是一个预训练模型&#xff0c;它已有一些知识储备&#xff0c;我们提的问题跟他的知识储备不相符时&#xff0c;会…