当前位置: 首页 > 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;能够确保每次调用都能返回一个唯一的值&…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...