当前位置: 首页 > news >正文

java八股-垃圾回收机制-垃圾回收算法,分代回收,垃圾回收器

文章目录

  • 垃圾回收算法
    • 引用计数法
    • 可达性分析算法
  • jvm垃圾回收算法
    • 标记清除算法
    • 标记整理算法
    • 复制算法
    • 本章总结
  • JVM中的分代回收
    • 本章总结
  • JVM有哪些垃圾回收器?
    • 1.串行垃圾收集器
    • 2.并行垃圾收集器
    • 3.CMS(并发)垃圾收集器
    • 本章小结
  • 详细聊一下G1垃圾回收器
    • 年轻代垃圾回收
    • 本章小结

垃圾回收算法

难易程度:★★★★☆
出现频率:★★★★☆
如果要定位什么是垃圾,有两种方式来确定,第一个是引用计数法,第二个是可达性分析算法

引用计数法

引用计数法刚开始:
在这里插入图片描述

引用计数法后面出现这种情况会泄漏内存
在这里插入图片描述

可达性分析算法

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

jvm垃圾回收算法

难易程度:★★★☆☆
出现频率:★★★★☆

标记清除算法

在这里插入图片描述

标记整理算法

在这里插入图片描述

复制算法

在这里插入图片描述

本章总结

JVM 垃圾回收算法有哪些?

  • 标记清除算法 :垃圾回收分为2个阶段,分别是标记和清除,效率高,有磁盘碎片,内存不连续
  • 标记整理算法:标记清除算法一样,将存活对象都向内存另一端移动,然后清理边界以外的垃圾,无碎片,对象需要移动,效率低
  • 复制算法:将原有的内存空间一分为二,每次只用其中的一块,正在使用的对象复制到另一个内存空间中,然后将该内存空间清空,交换两个内存的角色,完成垃圾的回收;无碎片,内存使用率低

JVM中的分代回收

难易程度:★★★☆☆
出现频率:★★★★☆
在这里插入图片描述

发现只有A能存活,其他BCDE都要被回收,先把能存活的对象放到To区(因此A首先被放到To区),清除剩下不能存活的对象,全部垃圾回收掉
在这里插入图片描述
把A复制到TO区域之后,后面又来了1,2,3,4,5区域,后面又要再次进行垃圾回收了,标记存活对象,复制到From区
在这里插入图片描述
复制到From区之后如下图
在这里插入图片描述
后面又来了q,w,e,r,t区域,内存再次不足,需要再次垃圾回收
在这里插入图片描述
又把存活的W复制到To,把历经数次GC之后依然能够存活的对象放到老年代中。
在这里插入图片描述
这里MixedGC等于major GC
在这里插入图片描述

本章总结

在这里插入图片描述

JVM有哪些垃圾回收器?

难易程度:★★★★☆
出现频率:★★★★☆

在jvm中,实现了多种垃圾收集器,包括:

  1. 串行垃圾收集器
  2. 并行垃圾收集器
  3. CMS(并发)垃圾收集器
  4. G1垃圾收集器

1.串行垃圾收集器

到达一个安全点之后,有一个线程负责垃圾回收,java应用中所有线程全部阻塞,STW,stop the world
在这里插入图片描述

2.并行垃圾收集器

原来多个线程正常运行,到达一个安全点之后,多个线程负责垃圾回收,并且其他java应用的线程全部阻塞,STW,stop the world
在这里插入图片描述

3.CMS(并发)垃圾收集器

CMS垃圾回收器主要是针对老年代 垃圾回收的
初始标记是运用可达性分析算法标记GC-ROOT,标记哪些是存活的对象,此时会阻塞其他线程,然后并发标记,此时其他线程正常运行
在这里插入图片描述

在这里插入图片描述
并发标记阶段追踪当前引用链,查看与A关联到的对象,比如B,c,d这些个都是存活的对象,不能被垃圾回收!
在这里插入图片描述
重新标记阶段存在的原因是:并发标记阶段可达性分析算法分析出来X不可达,后面因为代码一直在运行,也可能导致有引用引用了X,因此还需要多一个“重新标记”!!
在这里插入图片描述

本章小结

在这里插入图片描述

详细聊一下G1垃圾回收器

难易程度:★★★★☆
出现频率:★★★★☆

在这里插入图片描述

年轻代垃圾回收

这里G1的年轻代回收其实就是前面提到的分代回收机制
E是Eden,S是survivor,O是Old
在这里插入图片描述
E是Eden,S是survivor,O是Old
在这里插入图片描述
老年代阈值超过45% 时,触发CMS并发标记,并发标记阶段无需STW,但是重新标记阶段会STW,处理漏标的对象
在这里插入图片描述
在这里插入图片描述
混合垃圾回收是把老年代里面回收价值较高的对象,连同年轻代里面的Eden区,Survivor区,一起进行垃圾回收,这就是mixed Collection!
Eden区和To区复制到From区,From区域原来的对象复制到新的老年代Old中
下图标红的是老年代Old里面回收价值高的对象,一起回收了!
在这里插入图片描述
如果一个对象太大了,一个区域装不下,会存储到一个巨型对象中,分配一个连续的区域存储巨型对象
在这里插入图片描述

本章小结

详细聊一下G1垃圾回收器

  1. 应用于新生代和老年代,在JDK9之后默认使用G1
  2. 划分成多个区域,每个区域都可以充当 eden,survivor,old, humongous,其中 humongous 专为大对象准备
  3. 采用复制算法
  4. 响应时间与吞吐量兼顾
  5. 分成三个阶段:新生代回收(stw)、并发标记(重新标记stw)、混合收集
  6. 如果并发失败(即回收速度赶不上创建新对象速度),会触发 Full GC,Full-GC的话,用户暂停时间较长,长时间STW

相关文章:

java八股-垃圾回收机制-垃圾回收算法,分代回收,垃圾回收器

文章目录 垃圾回收算法引用计数法可达性分析算法 jvm垃圾回收算法标记清除算法标记整理算法复制算法本章总结 JVM中的分代回收本章总结 JVM有哪些垃圾回收器?1.串行垃圾收集器2.并行垃圾收集器3.CMS(并发)垃圾收集器本章小结 详细聊一下G1垃圾…...

iSCSI 和FC的概述

一、技术基础与架构 iSCSI 技术基础:iSCSI是基于TCP/IP协议的存储网络协议,它实现了在IP网络上运行SCSI协议。架构:iSCSI协议栈包括SCSI层、iSCSI层、TCP/IP层等,通过标准的以太网技术实现存储数据的传输。 FC 技术基础&#xff1…...

一文了解Android中的AudioFlinger

AudioFlinger 是 Android 音频框架中的一个核心组件,负责管理音频流的混合和输出。它是 Android 音频系统服务的一部分,作为音频框架和硬件之间的桥梁,接收应用程序的音频请求、进行混音处理,并最终通过音频硬件输出声音。 ![在这…...

超全面!一文带你快速入门HTML,CSS和JavaScript!

作为一名后端程序员,在开发过程中避免不了和前端打交道,所以就要了解一些前端的基础知识,比如三剑客HTML,CSS,JavaScript,甚至有必要学习一下Vue、React等前端主流框架。 学习文档:https://www.w3school.com.cn/ 一…...

C语言 | Leetcode C语言题解之第557题反转字符串中的单词III

题目&#xff1a; 题解&#xff1a; char* reverseWords(char* s) {int length strlen(s);char* ret (char*)malloc(sizeof(char) * (length 1));ret[length] 0;int i 0;while (i < length) {int start i;while (i < length && s[i] ! ) {i;}for (int p …...

408笔记合集

操作系统 《王道操作系统》-BitHachi 计算机网络 《王道计算机网络》--BitHachi 组成原理 《王道计算机组成原理》--BitHachi...

智慧医疗:纹理特征VS卷积特征

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

OPC学习笔记

一. 解决使用milo读取OPC设备字符串类型时&#xff0c;出现中文和特殊符号乱码的情况 解决前&#xff0c;读取字符串&#xff1a;你好 2. 解决后&#xff0c;读取字符串&#xff1a;你好 3. 解决前&#xff0c;读取字符串&#xff1a;165℃ 解决后&#xff0c;读取字符串&am…...

数据结构的时间复杂度和空间复杂度

目录 时间复杂度 空间复杂度 时间复杂度 基本操作的执行次数&#xff0c;为时间复杂度。 我们使用大O的渐进表示法来表示时间复杂度。 怎么使用&#xff1f; 先看例子&#xff1a; 在这个例子中&#xff0c; 基本操作为变量 count 的 加加 操作&#xff0c;并且&#xff0c;执行…...

HBase理论_背景特点及数据单元及与Hive对比

本文结合了个人的笔记以及工作中实践经验以及参考HBase官网&#xff0c;我尽可能把自己的知识点呈现出来&#xff0c;如果有误&#xff0c;还请指正。 1. HBase背景 HBase作为面向列的数据库运行在HDFS之上&#xff0c;HDFS缺乏随机读写操作&#xff0c;HBase正是为此而出现。…...

生产模式打包

在生产模式下打包 Node.js 和前端&#xff08;例如 Vue 或 React&#xff09;应用时&#xff0c;通常需要对代码进行优化&#xff0c;使其在生产环境中运行更高效。以下是如何在生产模式下配置和打包项目的步骤&#xff1a; 1. Node.js 生产模式打包 Node.js 本身不需要像前端…...

Vue的路由

Vue的路由 出发点&#xff1a;遇到多页面网页的反复跳转&#xff0c;有些繁琐&#xff0c;可以通过Vue的路由实现单页面中数据的变化 实现单页面中数据的变化&#xff08;通过Vue-router来进行操作的&#xff0c;数据的请求获取也需要ajax异步交互&#xff09;&#xff0c;具…...

Spring框架之策略模式 (Strategy Pattern)

策略模式&#xff08;Strategy Pattern&#xff09;详解 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一系列算法&#xff0c;并将每种算法封装到独立的策略类中&#xff0c;使它们可以相互替换&#xff0c;从而使算法的变化独…...

探索Google Earth Engine:利用MODIS数据和R语言进行2000-2021年遥感生态指数(RSEI)的时空趋势分析

前段时间,小编学习了在GEE上进行遥感生态指数(RSEI)的评估,非常头疼,但是实验了两周后,亲测有效,主要采用的是MODIS数据分析了2000-2021年中国内蒙古某地的RSEI时间序列分布状况,现在把学习的代码分享给大家。 1 GEE计算RSEI 1.1研究区域导入与初步定义 var sa = ee…...

多商户中英双语电商系统设计与开发 PHP+mysql

随着全球电商市场的扩展&#xff0c;多商户平台成为了越来越多商家参与全球贸易的重要方式。为了适应不同语言用户的需求&#xff0c;尤其是中英双语用户的需求&#xff0c;设计一个支持中英双语的电商系统显得尤为重要。本文将重点探讨如何设计一个多商户中英双语电商系统&…...

牵手App红娘专属1V1服务,打造贴心交友指导

对于年轻一代而言&#xff0c;婚恋方式已明显区别于传统&#xff0c;他们更倾向于直接、活泼的交流方式&#xff0c;享受着在轻松愉快的氛围中边玩边交友的乐趣。线上社交平台&#xff0c;尤其是那些基于兴趣构建的交友模式&#xff0c;正逐渐成为他们探索爱情、寻找共鸣的新舞…...

论文解析:边缘计算网络中资源共享的分布式协议(2区)

目录 论文解析:边缘计算网络中资源共享的分布式协议(2区) 核心内容: 核心创新点的原理与理论: 多跳边缘计算场景 一、边缘计算的基本概念 二、多跳边缘计算场景的含义 三、多跳边缘计算场景的应用 四、多跳边缘计算场景的优势 论文解析:协作边缘计算网络中资源共…...

Android Osmdroid + 天地图 (一)

Osmdroid 天地图 前言正文一、配置build.gradle二、配置AndroidManifest.xml三、获取天地图的API Key① 获取开发版SHA1② 获取发布版SHA1 四、请求权限五、显示地图六、源码 前言 Osmdroid是一款完全开源的地图基本操作SDK&#xff0c;我们可以通过这个SDK去加一些地图API&am…...

浅谈:基于三维场景的视频融合方法

视频融合技术的出现可以追溯到 1996 年 , Paul Debevec等 提出了与视点相关的纹理混合方法 。 也就是说 &#xff0c; 现实的漫游效果不是从摄像机的角度来看 &#xff0c; 但其仍然存在很多困难 。基于三维场景的视频融合 &#xff0c; 因其直观等特效在视频监控等相关领域有着…...

PostgreSQL序列:创建、管理与高效应用指南

一、引言 在PostgreSQL中&#xff0c;序列&#xff08;Sequence&#xff09;是一种用于生成唯一标识符的数据库对象。它们常常被用于为主键字段提供连续且唯一的值&#xff0c;特别是在创建新记录时。序列提供了一种机制&#xff0c;能够确保每次调用都能返回一个唯一的值&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...