【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍:

一、垃圾收集机制概述:

  • 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。
  • 内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

二、垃圾收集算法:

  1. 标记-清除(Mark-Sweep): - 首先标记所有需要回收的对象。 - 然后统一回收所有被标记的对象。
    • 缺点:效率不高,会产生内存碎片。
  2. 标记-清除-整理(Mark-Sweep-Compact): - 在标记-清除的基础上增加了整理的过程,将存活的对象向一端移动,解决内存碎片问题。
  3. 复制(Copying): 将内存分为两个区域,每次只使用一个区域。垃圾收集时,将存活的对象复制到另一个区域,并清空当前区域。
    • 优点:简单且高效,没有内存碎片问题。
    • 缺点:内存使用效率低(只有50%)。
  4. 增量收集(Incremental): - 将垃圾收集过程分步骤执行,每次只收集一部分对象,减少GC暂停时间。
  5. 分代收集(Generational Collection): - 基于对象生命周期的不同,将堆内存分为新生代和老年代,采用不同的收集策略。

三、垃圾收集器类型:

Java虚拟机提供了多种垃圾收集器,以适应不同的应用场景和性能需求。以下是一些常见的垃圾收集器:

  1. Serial收集器: - 单线程收集器,使用复制算法,适合单核处理器或小型应用。
  2. ParNew收集器: - Serial收集器的多线程版本,使用复制算法。
  3. Parallel收集器: - 使用多线程和标记-清除-整理算法,目标是提高吞吐量,适合科学计算等后台应用。
  4. CMS(Concurrent Mark Sweep)收集器: - 以最小化GC暂停时间为目标,使用标记-清除算法,适合需要较低延迟的应用。
  5. G1(Garbage-First)收集器: - 一种服务器端的收集器,将堆分割成多个区域,可以并行和增量地收集,减少GC暂停时间。
  6. ZGC(Z Garbage Collector)和Shenandoah: - 低延迟收集器,可以处理数TB级别的堆内存,GC暂停时间与堆大小无关。
  7. Epsilon收集器: - 一个无操作的收集器,不进行垃圾收集,主要用于性能测试。
  8. GC简史
    • 从JDK 1.3的Serial/GC,到JDK 1.4的Parallel GC,再到JDK 5的CMS,JDK 7的G1,以及JDK 11的ZGC和Shenandoah,Java的垃圾收集器不断进化,以满足日益增长的性能和内存管理需求。
      每种垃圾收集器都有其特定的使用场景和优缺点,开发者可以根据应用的特点和性能要求选择合适的垃圾收集器。

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

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

相关文章

智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)

视频演示:基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目_哔哩哔哩_bilibili 基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目: https://pan.baidu.com/s/1f41gAfOOnlcQoKoMx3o84A?pwd6j2g 提取码: 6j2g 注:本项目为学习完…

数据结构之红黑树的 “奥秘“

目录: 一.红黑树概念 二. 红黑树的性质 三.红黑树的实现 四.红黑树验证 五.AVL树和红黑树的比较 一.红黑树概念 1.红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何 一条从根…

MySQL--库的操作

文章目录 1.创建数据库2.创建数据库案例3.字符集和校验规则3.1默认字符集3.2默认校验规则3.3查看系统默认字符集以及校验规则3.4查看数据库支持的字符3.5查看数据库支持的字符集校验规则3.6校验规则对数据库的影响不区分大小写查询:排序结果:区分大小写查…

综合案例-数据可视化-地图

一、pyecharts—地图快速入门 假设我们要将6个地区的某种数量在地图上标注出来,首先导入pyecharts包内地图相关模块,然后准备地图数据(数据类型是列表,列表的元素类型为元组),然后把准备好的数据添加进地图…

51单片机个人学习笔记11(AT24C02-I2C总线)

前言 本篇文章属于STC89C52单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 [1-1] 课程简介_哔哩…

Ubuntu查看系统用户信息

0 Preface/Foreword 1 查看方式 1.1 查看系统用户 getent passwd getent: Get entries for Name Service Switch Libraries. 该命令会列出系统上所有用户的详细信息,包括用户名、密码、用户ID(UID)、组ID(GID)、用户描…

0基础学习爬虫系列:程序打包部署

1.目标 将已经写好的python代码,打包独立部署或运营。 2. 环境准备 1)通义千问 :https://tongyi.aliyun.com/qianwen 2)0基础学习爬虫系列–网页内容爬取:https://blog.csdn.net/qq_36918149/article/details/14199…

Pytest-@pytest.fixture夹具篇(一)

一、定义 在Python的pytest测试框架中,pytest.fixture是一个(不是唯一)装饰器,用于定义一个测试夹具。 二、简单实例 使用参数autouserTrue pytest.fixture(autouseTrue) def my_fixture():print("Setup: 准备测试环境&q…

前端框架有哪些?

前言 用户体验是每个开发网站的企业中的重中之重。无论后台有多方面的操作和功能,用户的视图和体验都必须是无缝的最友好的。这需要使用前端框架来简化交互式、以用户为中心的网站的开发。 前端框架是一种用于简化Web开发的工具,它提供了一套预定义的代…

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机,暗影精灵8plus电竞主机,安装ubuntu后wifi怎么都搜不到热点,前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统,我用无线网连接了一下&am…

基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿沟,信息的…

Redis面试题整理

Redis 1、Redis主从集群 1.1、搭建主从集群 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离 1.2、主从同步原理 当主从第一次同步连接或断开重连时,从节点都会发送psync请求&…

sass实现文字两侧横线

sass实现文字两侧横线 自我记录 mixin 的基本作用: 代码复用:把常用的样式封装在一起,不需要重复写相同的代码。参数化:可以通过参数动态生成样式,提高灵活性。逻辑处理:结合 Sass 的控制语句&#xff0…

【最新华为OD机试E卷-支持在线评测】计算疫情扩散时间(200分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

【JavaScript】LeetCode:31-35

文章目录 31 反转链表32 回文链表33 环形链表34 环形链表Ⅱ35 合并两个有序链表 31 反转链表 初始化:cur head,pre null。pre和cur一起向前移。由于反转链表时,cur.next指向pre,导致cur在下次循环中就找不到了原来的cur.next&am…

微擎忘记后台登录用户名和密码怎么办?解决方法

微擎忘记后台登录名和登录密码是很常见的,服务器百科网fwqbk.com告诉你找回后台登录用户名和密码的方法: 一:找回微擎后台用户名 (如果只是忘记了后台登录密码,请忽略此步骤,跳转到第二步) 通…

2.ChatGPT的发展历程:从GPT-1到GPT-4(2/10)

引言 在人工智能领域,自然语言处理(NLP)是连接人类与机器的重要桥梁。随着技术的不断进步,我们见证了从简单的文本分析到复杂的语言理解的转变。ChatGPT,作为自然语言处理领域的一个里程碑,其发展历程不仅…

C++ | Leetcode C++题解之第395题至少有K个重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestSubstring(string s, int k) {int ret 0;int n s.length();for (int t 1; t < 26; t) {int l 0, r 0;vector<int> cnt(26, 0);int tot 0;int less 0;while (r < n) {cnt[s[r] - a];…

[Golang] goroutine

[Golang] goroutine 文章目录 [Golang] goroutine并发进程和线程协程 goroutine概述如何使用goroutine 并发 进程和线程 谈到并发&#xff0c;大多都离不开进程和线程&#xff0c;什么是进程、什么是线程&#xff1f; 进程可以这样理解&#xff1a;进程就是运行着的程序&…

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片&#xff0c;视频&#xff0c;摄像头的检测 项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面&#xff08;GUI&#xff09;以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测&#xff0c;并估算目标的距离。通过…