垃圾回收专题

article/2025/7/1 19:54:30

一.两种回收策略

  • 引用计数法
    给对象添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0的对象就是可被回收的对象.
    该方法实现简单,效率高,但是目前主流的虚拟机中并没有采用该策略管理内存,最主要的原因是它很难解决对象直接相互循环引用的问题,但是它们由于相互引用导致计数器都不为0,于是引用计数器无法通知GC回收器回收它们.

  • 可达性分析算法
    将"GC Roots"对象作为起点,从这些夹断开始向下搜索引用的对象,找到的对象全部标记为非垃圾,其余未标记的对象都是垃圾对象.
    GC Roots的判断方法:一般为线程栈的本地变量,静态变量,本地方法栈的变量等等.

二.垃圾回收算法

  • 1标记清除算法
    在这里插入图片描述 特点:清除后空闲位置不连续,容易产生碎片

  • 2复制算法
    在这里插入图片描述特点:将内存分割,存活对象复制到没有使用过的另一半内存中,可回收的对象的清除,虽然降低了碎片,但是空间使用率低

  • 3标记整理

在这里插入图片描述
特点:将内存中可回收对象标记回收后把存活对象进行整理,虽然没有碎片但是效率低

常用垃圾回收器

在这里插入图片描述
图中连线表示可以配对使用
java1.8之前的堆内存采用分代的概念.

在这里插入图片描述

serial采用单线程复制算法,暂停所有用户线程,用于新生代

在这里插入图片描述

serial old采用单线程标记整理算法,暂停所有用户线程,用于老年代

parallel scavenge和parallel old(PSPO)是1.8默认收集器

在这里插入图片描述

parallel scavenge采用多线程复制算法,暂停所有用户线程,用于新生代
在这里插入图片描述

parallel old采用多线程标记整理算法,暂停所有用户线程,用于老年代

上述两种都会导致用户线程暂停!
在这里插入图片描述

par new 采用采用多线程复制算法,暂停所有用户线程,用于新生代
在这里插入图片描述

CMS (ConcurrentMarkSweep)采用标记清除算法

  • 第一阶段:标记gcRoots连接的第一个对象(该过程会暂停所有用户线程,但时间极短)
  • 第二阶段:并发标记,继续沿第一阶段标记的对象往下标记(该过程和用户线程并发,可能会产生浮动垃圾甚至误标垃圾,浮动垃圾可在下次GC回收)
  • 第三阶段:重新标记,解决误标垃圾问题(该过程会暂停所有用户线程,但时间极短)
  • 第四阶段:并发清理,清理垃圾(该过程和用户线程并发,考虑极端情况下,此时老年代新的垃圾放不下,会立即终止CMS,转而采用serial old替补)

CMS的效率在毫秒级

java1.8之后没有分代的概念,只有分区的概念
java1.9默认收集器G1特点是一边运行一边回收 比CMS效率更高
java1.9及以后的垃圾回收器且听下回分解


http://chatgpt.dhexx.cn/article/vAbEtgaR.shtml

相关文章

26.垃圾回收器

垃圾回收器 垃圾收集器没有JVM规范中明确定义,不同厂商不同版本的JVM具体实现 JDK每次迭代的时候都会对GC进行优化 java不同版本新特性 语法层面: Lambda表达式 switch 自动装拆箱 enumAPI层面: Stream LocalDate Optional String Collectors底层优化: JVM优化 GC优化 元空间…

Java垃圾搜集器

Java垃圾收集器 概述 说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史远远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技…

2021-04-17垃圾回收器

文章目录 七种典型的垃圾回收器经典收集器与垃圾分代之间的关系如何查看默认的垃圾回收器Serial回收器ParNew回收器Parallel Scavenge回收器CMS回收器G1回收器总结ZGC垃圾收集器的组合关系 七种典型的垃圾回收器 串行回收器:Serial、Serial Old 并行回收器&#xf…

常见的垃圾回收器

一、参考文章 https://www.cnblogs.com/datiangou/p/10245874.html https://www.cnblogs.com/jason1990/archive/2019/10/24/11732261.html 二、常用垃圾回收器 1. JDK诞生 Serial追随 提高效率,诞生了PS,为了配合CMS,诞生了PN&#xff0c…

Hack The Box——Luanne

目录 简介 信息收集 漏洞发现 Lua代码注入 漏洞利用 权限提升 用户r.michaels的Shell 总结 简介 靶机偏CTF类型,评分才2.3,评分这么低是有原因的。总体思路是通过lua代码注入获得WebShell,然后利用CVE-2010-2320读取普通用户ssh私钥…

I Box

Box 链接:https://ac.nowcoder.com/acm/contest/7854/I 来源:牛客网 Bella is working in a factory that produces boxes. All boxes are in a shape of rectangular parallelepipeds. A net of the corresponding parallelepiped is cut out of a …

常用的垃圾回收器

1、常见的垃圾回收器介绍: 如果说收集算法是内存回收的⽅法论,那么垃圾收集器就是内存回收的具体实现。现在为⽌还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应⽤场景选择适合⾃⼰的垃圾收集器。…

Java 捡垃圾利器

文章目录 垃圾收集器Serial优点使用场景 ParNew使用场景配合使用CMSG1 Parallel Scavenge使用场景参数 Serial OldParallel OldCMS流程优点缺点 G1概述主要特征内存分布回收定位问题与解决方案与 CMS 小结拓展阅读参考资料 垃圾收集器 收集算法是内存回收的方法论,…

垃圾回收站

【冒泡排序】c实现冒泡排序代码 【冒泡排序】c实现冒泡排序代码 【冒泡排序】c实现冒泡排序代码固态激光雷达 转载自 yangchuang93 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 冒泡排序的基…

labweek8

实验报告 实验内容 进程间通信—消息机制。 (1) 编译运行课件 Lecture 09 例程代码:Algorithms 9-1 ~ 9-2. (2) 修改代码,观察在 msgsnd 和 msgrcv 并发执行情况下消息队列的变化情况。 (3) 仿照 alg.8-4~8-6,编制基于 POSIX API 的进程间…

常见垃圾回收器

CMS和G1是最重要的 新生代一般采用标记复制,老年代一般采用标记整理算法 Serial:垃圾回收线程只有一个,而且垃圾回收线程工作的时候其他用户线程要停下来 Parnew:Serial的多线程版本,有多个垃圾回收线程,垃…

垃圾回收(一)

文章目录 1. 确定哪些对象还“存活”,哪些已经“死去”1.1 引用计数算法1.2 可达性分析算法1.3 引用 2.垃圾回收算法2.1 分代收集理论跨代引用 2.2 标记-清除算法2.3 标记-复制法2.4 标记-整理算法 垃圾收集需要完成的三件事: 哪些内存需要回收&#xff…

python 垃圾箱-垃圾回收

前戏 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,那什么样的变量值…

纪念第一届cccc天梯赛

来一篇迟到的文章 先来爆一下战绩吧:SDUT,学校排名全国第六获金,山东省冠军。学校一共三支队伍,学长们一支最强的队获一等奖,剩下的两支二等奖。 战绩总体来看还不错吧,离不开我们每一个队员和老师们的努…

2021 CCCC天梯赛补题

前言不想看请直接跳过~~~~ 前言检讨:天梯赛我拉垮了,我拖了队伍后腿,我有罪。 分析原因,首先是前一个星期训练量不够,没有跟上队友训练的进度,一些基础的STL的…

2021年CCCC天梯赛 【部分题题解】

天梯赛有三个level,第一个level基本就是语法题,第二个level是基础算法和STL库的一些应用。 第三个level就是一些难的算法。 L3的题都不是太会,有思路但是写不出来。 目录 L1人与神两小时学完C语言强迫症降价提醒机器人大笨钟的心情吉老师的回…

2021年CCCC天梯赛L3 还原文件题解

题目如下 一份重要文件被撕成两半,其中一半还被送进了碎纸机。 我们将碎纸机里找到的纸条进行编号,如图 1 所示。然后根据断口的折线形状跟没有切碎的半张纸进行匹配,最后还原成图 2 的样子。 要求你输出还原后纸条的正确拼接顺序。 图 1…

2020CCCC天梯赛补题记录

目录 总结补题L2-035 完全二叉树的层序遍历 (25分)L2-036 网红点打卡攻略 (25分)L3-025 那就别担心了 (30分)28分版本:30分版本(记忆化搜索) 总结 1.口罩那题打完就只剩三十分钟了,之后卡在了完全二叉树的层序遍历那题,就没有再敢往后看&…

2021 CCCC天梯赛L1补题

前言 这次天梯赛表现没有达到预期,L1的分没有拿全,L2有2题没考虑完全,总之很愧疚拖了队友后腿。今天先补上L1没拿满分的题。 L1补题 前言L1-078 吉老师的回归输入样例1输出样例1输入样例2输出样例2 思路代码实现 L1-080 乘法口诀数列输入样例…

CCCC天梯赛 L2-037 包装机

CCCC天梯赛 L2-037 包装机 一种自动包装机的结构如图 1 所示。 首先机器中有 N 条轨道,放置了一些物品。 轨道下面有一个筐。 当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。 当 0 号按钮被按下时,机械手…