【JVM】总结篇之垃圾回收★

news2025/4/27 6:56:20

文章目录

  • 为什么需要GC
  • 垃圾回收算法★
    • 垃圾判断阶段
      • 引用计数算法
      • 可达性分析
        • GC roots
        • 为什么会stop world?
    • 垃圾清除阶段
      • 标记-清除(Mark - Sweep)算法
      • 复制(Copying)算法
      • 标记-压缩(或标记-整理、Mark - Compact)算法
      • 分代收集算法
      • 增量收集(Incremental Collecting)算法
      • 分区算法 G1 GC使用的算法
    • 一些概念
      • > System.gc()和Runtime.getRunTime().gc()会做什么事情?
      • > finalize()方法详解
      • > 什么是内存泄漏和什么是内存溢出
      • > 并发和并行
      • > 安全点(Safepoint) 安全区域(Safe Region)
      • > 强引用、软引用、弱引用、虚引用
    • 垃圾回收器
      • 分类
      • GC评估指标
      • 垃圾回收器有哪些
        • 组合
        • 查看使用GC
        • Serial GC 串行回收
        • ParNew GC 并行回收
        • Parallel GC 吞吐量优先
        • CMS 低延迟
          • CMS 收集过程
          • 特点
          • 参数
        • 对比
        • G1 区域化分代式
          • 为什么需要
          • 特点
          • 参数
          • 分区region
          • G1 回收过程
            • G1回收过程一:年轻代GC
            • G1回收过程二:并发标记过程
            • G1回收过程三:混合回收
            • G1回收可选的过程四:Full GC
          • 优化建议

关于垃圾收集有三个经典问题:

  • 哪些内存需要回收?
  • 什么时候回收?
  • 如何回收?

讲讲JVM的gc (携程)
GC是什么?为什么要有GC? (蚂蚁金服)
垃圾回收的优点和原理。 (蚂蚁金服)
垃圾回收机制等 (支付宝)
GC回收的是哪部分的垃圾?(vivo)
垃圾回收的优点和原理?基本原理是什么?(瓜子)
GC是什么?为什么要有GC? (美团)
简述Java垃圾回收机制 (美团)
垃圾回收的优点和原理。(美团)

为什么需要GC

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
Java中垃圾回收的重点区域是?

  • 方法区

  • 在这里插入图片描述

垃圾回收算法★

GC算法都有哪些?他们之间的区别是什么?(菜鸟)
JVM的常用的GC算法(高得地图)
GC垃圾回收机制算法(数信互融科技发展有限公司)
GC的算法,复制算法和标记清除的优缺点?(迪原创新)
常用的GC算法,如何确定哪些是要被清除的哪些是不能被清除(网易邮箱、美团)
垃圾回收机制的几种回收算法(亚信)
GC算法都有哪些?他们之间的区别是什么?各自的适用场景?(B站)
GC 的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?(腾讯)
如和判断一个对象是否存活?(唯品会)
Java 中垃圾收集的方法有哪些?(苏宁)
你是用什么方法判断对象是否死亡?(滴滴)
如何判断一个对象是否存活? (蚂蚁金服)
垃圾收集策略和算法 (百度)
常见的垃圾回收器算法有哪些,各有什么优劣?(网易)
JVM有哪些回收算法,对应的收集器有哪些? (蚂蚁金服)

垃圾判断阶段

在JVM中究竟是如何标记一个死亡对象呢? 简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。

引用计数算法

对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。
在这里插入图片描述

可达性分析

相对于引用计数算法而言,可达性分析算法不仅同样具备实现简单和执行高效等特点,更重要的是该算法可以有效地解决在引用计数算法中循环引用的问题,防止内存泄漏的发生。

在这里插入图片描述
在这里插入图片描述

GC roots

在这里插入图片描述在这里插入图片描述

为什么会stop world?

在这里插入图片描述
在这里插入图片描述

垃圾清除阶段

当成功区分出内存中存活对象和死亡对象后, GC 接下来的任务就是执行垃圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用内存空间为新对象分配内存。目前在JVM中比较常见的三种垃圾收集算法是标记-清除算法( Mark-Sweep )、复制算法( Copying )、标记 - 压缩算法( Mark-Compact ) 。

标记-清除(Mark - Sweep)算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

复制(Copying)算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标记-压缩(或标记-整理、Mark - Compact)算法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

分代收集算法

在这里插入图片描述

JVM的垃圾回收为什么采用分代GC。跟语言有关系吗?(阿里-钉钉)
分代的意义说一下 (阿里-钉钉)
GC分代算法(花旗银行)
说一下gc算法,分代回收说下 (百度)
Java怎么进行垃圾回收的?什么对象会进老年代? 垃圾回收算法有哪些?为什么新生代使用复制算法? (京东)
分代垃圾回收过程? (美团)
GC如何分代的?各代用什么算法回收? (美团)

目前几乎所有的GC都是采用分代收集(Generational Collecting)算法执行垃圾回收的。

在这里插入图片描述

增量收集(Incremental Collecting)算法

不想STW
在这里插入图片描述
在这里插入图片描述

分区算法 G1 GC使用的算法

分代算法将按照对象的生命周期长短划分成两个部分,分区算法将整个堆空间划分成连续的不同小区间

每一个小区间都独立使用,独立回收。这种算法的好处是可以控制一次回收多少个小区间。
一般来说,在相同条件下,堆空间越大,一次GC时所需要的时间就越长,有关GC产生的停顿也越长。为了更好地控制GC产生的停顿时间,将一块大的内存区域分割成多个小块,根据目标的停顿时间,每次合理地回收若干个小区间,而不是整个堆空间,从而减少一次GC所产生的停顿。
在这里插入图片描述

一些概念

> System.gc()和Runtime.getRunTime().gc()会做什么事情?

在这里插入图片描述

> finalize()方法详解

finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。

大致描述一下finalize流程:当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。

> 什么是内存泄漏和什么是内存溢出

内存溢出OOM
在这里插入图片描述

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

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

相关文章

【Redis源码】 RedisObject结构体

【Redis源码】 RedisObject结构体 文章目录 【Redis源码】 RedisObject结构体概要1. redis object 由来2. 通过汇编代码分析3. 总结 概要 博主这里从redis object由来,和从底层内存分配角度进行讲解哦,小伙伴们自行选择读取 1. redis object 由来 ​ …

Ungoogled Chromium127 编译指南 MacOS 篇(二)- 项目要求

1. 引言 在开始编译 Ungoogled Chromium 之前,我们需要确保系统满足所有必要的硬件和软件要求。由于浏览器编译是一个资源密集型的任务,合适的硬件配置和完整的软件环境至关重要。本文将详细介绍编译 Ungoogled Chromium 所需的各项要求。 2. 硬件要求…

专家混合(MoE)大语言模型:免费的嵌入模型新宠

专家混合(MoE)大语言模型:免费的嵌入模型新宠 今天,我们深入探讨一种备受瞩目的架构——专家混合(Mixture-of-Experts,MoE)大语言模型,它在嵌入模型领域展现出了独特的魅力。 一、M…

【Golang 面试题】每日 3 题(二十四)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

TCP Analysis Flags 之 TCP Retransmission

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

Docker 使用Dockerfile创建镜像

创建并且生成镜像 在当前目录下创建一个名为Dockerfile文件 vi Dockerfile填入下面配置 # 使用 CentOS 作为基础镜像 FROM centos:7# 设置工作目录 WORKDIR /app# 复制项目文件到容器中 COPY bin/ /app/bin/ COPY config/ /app/config/ COPY lib/ /app/lib/ COPY plugin/ /a…

Matlab 数据处理与可视化的多元拓展应用(具体代码分析)

一、代码整体功能概述: 该代码主要实现了以下几个功能: 从文件(part1.txt)中读取数据,并提取第二列数据,将其存储在 originalColumnData 中。对原始数据进行可视化,包括绘制置零前数据的折线图…

Oracle OCP考试常见问题之线上考试流程

首先要注意的是:虽然Oracle官方在国际上取消了获得OCP认证需要培训记录的要求,但在中国区,考生仍然需要参加Oracle的官方或者其合作伙伴组织的培训,并且由Oracle授权培训中心向Oracle提交学员培训记录。考生只有在完成培训并通过考…

第2章 市场走势的分类与组合

本章主要讨论市场中走势的分类与组合,从基本假设出发,对市场的走势状态进行分类,探讨不同的走势组合和走势组合分类,以深刻理解走势。 2.1 走势分类 根据第一章市场的基本假设三,走势包含无序运动状态(混…

【Excel/WPS】根据平均值,生成两列/多列指定范围的随机数/随机凑出两列数据

原理就是通过随机生成函数和平均值函数。 适用场景:在总体打分后,需要在小项中随机生成小分数 第一列:固定的平均值A2第二列: RANDBETWEEN(A2-10,A210)第三列:根据第二列用平均值函数算除 A2*2-B2这是随机值1的公式&am…

STM32裸机开发转FreeRTOS教程

目录 1. 简介2. RTOS设置(1)分配内存(2)查看任务剩余空间(3)使用osDelay 3. 队列的使用(1)创建队列(1)直接传值和指针传值(2)发送/接收…

Golang的网络安全漏洞检测

Golang的网络安全漏洞检测 一、网络安全意识的重要性 在当今网络高度发达的环境下,网络安全问题变得异常突出。黑客利用各种手段对网络系统进行攻击,企图窃取数据、篡改信息、瘫痪服务等,因此网络安全成为全球关注的焦点。在这种环境下&#…

oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln

目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考,oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场,主要考察 nmap的使用已经是否会看输出,以及是否会通过应用查找对应漏…

git的rebase和merge的区别?

B分支从A分支拉出 1.git merge 处于A分支执行,git merge B分支:相当于将commit X、commit Y两次提交,作为了新的commit Z提交到了A分支上。能溯源它真正提交的信息。 2.git rebase 处于B分支,执行git rebase A分支,B分支那边复…

ansible-性能优化

一. 简述: 搞过运维自动化工具的人,肯定会发现很多运维伙伴们经常用saltstack和ansible做比较,单从执行效率上来说,ansible确实比不上saltstack(ansible使用的是ssh,salt使用的是zeromq消息队列[暂没深入了解]),但其实…

Pytest钩子函数,测试框架动态切换测试环境

在软件测试中,测试环境的切换是个令人头疼的问题。不同环境的配置不同,如何高效切换测试环境成为许多测试开发人员关注的重点。你是否希望在运行测试用例时,能够动态选择测试环境,而不是繁琐地手动修改配置? Pytest 测…

【RK3568笔记】Android修改开机动画

概述 Android 的开机动画是由一系列连续的 PNG 图片作为帧组成的动画形式,不是一张 GIF 图片。将各帧 PNG 图片以压缩方式进行保存(压缩方式要求是存储压缩),并将保存的文件名命名为 bootanimation.zip,这个 bootanim…

华为路由器、交换机、AC、新版本开局远程登录那些坑(Telnet、SSH/HTTP避坑指南)

关于华为设备远程登录配置开启的通用习惯1、HTTP/HTTPS相关服务 http secure-server enablehttp server enable 2、Telnet服务telnet server enable3、SSH服务stelnet server enablessh user admin authentication-type password 「模拟器、工具合集」复制整段内容 链接&…

spring boot学习第二十三篇:Spring Boot集成RocketMQ

前置条件先安装好RocketMQ 希望在Window10安装rocketMQ并简单使用&#xff0c;可以参考如下文章&#xff1a; Window10安装rocketMQ并简单使用-CSDN博客 1、pom.xml文件里面加上依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId&…

花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7%

花生好坏缺陷识别数据集,7262张图片&#xff0c;支持yolo&#xff0c;coco json&#xff0c;pasical voc xml格式的标注&#xff0c;识别准确率在95.7% 数据集分割 训练组87&#xff05; 6353图片 有效集8% 606图片 测试集4% 303图片 预处理 自动定…