JVM -垃圾回收器

news2024/9/22 9:34:41

本人在这篇文章中讲解了垃圾回收机制,这为前置知识

美团一面面经:Threadlocal(线程局部变量的原理)->内存泄漏问题->垃圾回收机制_threadlocal回收-CSDN博客

首先对前置知识漏洞做一个补充:java的引用类型

  1. 强引用:被仍一GC Roots对象【强引用】的对象,该对象都不会被垃圾回收

     

    User user=new User();

  2. 软引用:仅有软引用该对象时,在垃圾回收后,如果内存仍不足会再次触发垃圾回收
    User user=new User();
    SoftReference softReference =new SoftReference (user)

  3. 弱引用:仅有弱引用该对象时,垃圾回收无论内存是否充足都会回收弱引用对象,需要配合SoftReference(软引用)使用。此时就是ThreadLocal内存泄漏的原因
    User user=new User();
    WeakReference weakReference=new WeakReference(user)

  4. 虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由Reference Handler线程调用虚引用相关方法释放直接内存

JVM 有哪些垃圾回收器?

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

串行垃圾收集器

Serial和Serial Old串行垃圾收集器,是指使用单线程进行垃圾回收,堆内存较小,适合个人电脑

  1. Serial 作用于新生代,采用复制算法
  2. Serial Old作用与老年代,采用标记-整理算法

垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收的完成

一个线程进行垃圾回收其他线程阻塞

并行垃圾收集器

Parallel New和Parallel Old是一个并行垃圾回收器,JDK8默认使用此垃圾回收器

  1. Parallel New作用于新生代,采用复制算法
  2. Parallel Old作用于老年代,采用标记-整理算法

在进行垃圾回收的时候,所有线程都要进行暂停(STW),等待垃圾回收的完成

多个线程同时进行垃圾回收

CMS(并发)垃圾收集器

CMS是使用标记-清除算法的、仅仅针对老年代的垃圾回收器。

1.以最短回收停顿时间为目标的收集器、停顿时间短

2.进行垃圾回收时,应用任然能正常运行

 

1.初始化阶段,指挥标记与GCRoots之间关联的A。(找出GCRoots之间引用的节点)

2.并发标记的时候,会根据引用链路标记B、C、D(根据引用链路标记节点)

3.重新标记阶段,因为初始化阶段和并发标记阶段中其他线程都是可以运行的,所以就会存在漏标记的问题。在此期间,如果X被引用了,那么重新标记会标记X,如果D或者B没有被引用了也会取消对应的标记。(最后检查在此期间是否有其他线程引用了新节点或者取消了新节点的引用)

4.并发清理

G1垃圾回收器

1.应用于新生代和老年代,JDK9的默认回收器

2.划分多个区域,每个区域都可以充当eden区,survivor,old,humongous,其中humongous转为大对象准备

3.采用复制算法

4.并发失败会触发Full GC

5.分为三个阶段:新生代回收、并发标记、混合收集

1.年轻代垃圾回收

  1. 初始时,所有区域都处于空闲状态
  2. 创建了一些对象,跳出一些空闲区域作为伊甸园区存储这些对象
  3. 当伊甸园需要垃圾回收时,跳出一个空闲区域作为幸存区,用复制算法复制存活对象,需要暂停用户线程
  4. 随着时间流逝,伊甸园的内存又有不足
  5. 将伊甸园以及之前心存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代

2.年轻代垃圾回收+并发标记

当老年代占用内存超过阈值(默认45%)后触发并发标记,这是无需暂停用户线程

1.并发标记之后,会有重新标记阶段解决漏标问题,此时需要暂停用户线程

2.这些都完成后就知道了老年代有哪些存活对象,随后进入混合收集阶段。此时不会对所有老年代区域进行回收,而是根据暂停时间目标 优先回收价值高(存活对象少)的区域

混合垃圾回收

混合收集阶段中,参与复制的有 eden、survivor、old

这次回收中:

1.eden区和s区的垃圾回收都将存活对象放入新的S区中

2.s区中到达阈值的存货对象和old区占用内存超过45%的经过GC后的存货对象放入新的O区中

复制完成,内存得到释放。进入下一轮的新生代回收、并发标记、混合收集

一个对象如果太大了会存入一个巨型对象中,一个区域装不下,会分配连续的区域进行存储

文章部分图片来自互联网收集

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

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

相关文章

时序电路实验-节拍脉冲发生器

二、实验目的 掌握节拍脉冲发生器的设计方法,理解节拍脉冲发生器的工作原理。 三、实验环境 PC计算机 四、实验内容 单步/连续节拍发生电路设计 增加两个2-1多路选择器,可将图3.3所示电路修改为图3.5所示电路。 图3.5单步/连续节拍脉冲发生器工作波…

如何进行长截图的两种方法

前言 本文主要讲2种截图方式,分别是谷歌和QQ。 谷歌分为Web端 和 移动端,选一种即可。 第一种:谷歌浏览器控制台自带的 1.先把控制台语言更改为中文,方便查看 ①.按F12,点击设置面板 ②.修改语言为中文并关闭 ③.点击…

七、OpenCVSharp 中的图像边缘检测

文章目录 简介一、Sobel 算子1. 水平和垂直方向的 Sobel 算子2. 梯度幅值和方向的计算3. Sobel 算子的参数调整和效果优化二、Canny 边缘检测1. Canny 算法的步骤详解(高斯平滑、梯度计算、非极大值抑制、双阈值检测)2. 高低阈值的选择对边缘检测结果的影响3. Canny 边缘检测…

阿里云服务器CentOS7安装MinIO

1. 概述 MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多个节点上实现数据的高可用和容错,采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由选择底层存储介质。 MinIO主要特点: 高性能&…

《MySQL全面指南:从基础到精通》专栏大纲

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

Linux 平台 PulseAudio 音频播放数据通路 I

Linux 内核中,音频子系统由 ALSA 框架实现,用户空间应用程序通过 ALSA 框架向 devtmpfs 虚拟文件系统,即 /dev/snd 目录下导出的一组紧密相关的设备文件,如 controlC0、pcmC0D0c 和 pcmC0D0p 等与 Linux 内核音频子系统交互&#…

ORB-SLAM3(Failed to load image)问题解决(WSL2配置)

一、概述 因为需要使用wsl2进行视觉SLAM的配置,我选择的事ORB-SLAM3,原来之前也配置过,比较熟悉,这次换了一个新的系统wsl2下的Ubuntu20.04下面进行配置。中间出现了一些跟原来不太一样的问题。这里将遇到的问题进行记录一下。 二…

【体外诊断】基于ARM+FPGA全自动核酸提取仪

全自动核酸提取仪 ARM: NXP IMX8/IMX6U, TI AM62X/AM5728, RK: RK3588/RK3568 FPGA: Xilinx A7/K7/SPANTAN6/ZYNQ/MPSOC, 国产复旦微、安路、高云、紫光 全自动核酸提取仪是一种高精度、高效率的核酸提取设备,主要用于对样本进行核酸提取。其原理是使用自动化控制系统,通过多…

mysql B+ 树

问题: mysql innodb引擎 B树主键自增,插入数据时是从中间分裂,还是使用页尾部元素作为父节点的值然后添加一个新页,或者说主键连续自增,mysql有没有做这样的优化? 以下是Chat GPT给出的回答:

window搭建代理ip池:详细的搭建指南分享

在Windows上搭建代理IP池的指南 在进行网络爬虫或其他需要频繁请求的任务时,建立一个代理IP池可以有效提高抓取效率和隐私保护。本文将详细介绍如何在Windows环境下搭建一个简单的代理IP池。 1. 准备工作 在开始之前,请确保你具备以下条件&#xff1a…

【排序汇总】这里记录一切与搜索排序相关的内容~(更新ing)

目录 经典算法快速排序核心思想cpp代码 二分查找核心思想cpp代码 具体题目荷兰旗问题-颜色分类 (leetcode75)思路cpp代码 数组中的第K个最大元素 (leetcode215)思路:快速选择cpp代码 经典算法 快速排序 经典面试手撕题,刚好明天又要面试百度了&#xf…

固态硬盘用mbr还是GPT?固态硬盘分区类型用mbr还是GPT分析

固态硬盘用mbr还是GPT?答:固态硬盘分区类型用mbr还是gpt其实取决于你对分区要求及引导模式。我们知道现在的引导模式有uefi和legacy两种引导模式,如果采用的是uefi引导模式,分区类型对应的就是gpt分区(guid),如果引导模…

Java基础——注释

在开发中注释是必不可少的,帮助我们更好的标记阅读代码,下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释,只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/,注释多行代…

计算机毕业设计 《计算机基础》网上考试系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

Idea启动Tomcat控制台中文乱码

Idea配置Tomcat后启动,控制台显示中文乱码 网上搜索资料会发现有要改server.xml URIEncodingUTF-8的,有要改idea文件夹下idea64.exe.vmoptions添加-Dfile.encodingUTF-8的,有要在idea里Tomcat配置中VM Options指定-Dfile.encodingUTF-8的。其…

指令及指令系统

1.指令的基本格式 1.1指令系统 指令(机器指令)是指示计算机执行某种操作的命令。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。 指令系统是指令集体系结构(ISA)中最核心的部分,ISA完整定义了软件和硬件之间的接口,是机器语…

7.1 多态案例

一、案例1&#xff1a;计算器类 1.1 普通方式实现 #include <iostream> #include <string> using namespace std;class Calculator { public:int num1;int num2;int result(string oper){if (oper "")return num1 num2;else if (oper "-"…

法线纹理贴图计算(切线空间世界空间)

效率&#xff1a; 在切线空间中计算&#xff0c;效率更高&#xff0c;因为可以在顶点着色器中就完成对光照、视角方向的矩 阵变换&#xff0c;计算量相对较小。( 矩阵变换在顶点着色器中计算) 在世界空间中计算&#xff0c;效率较低&#xff0c;由于需要对法线贴图进行采样&a…

【区块链+金融服务】区块链在仓储融资的创新应用 | FISCO BCOS应用案例

释放数据要素价值&#xff0c;FISCO BCOS 2024 应用案例征集 在仓储融资业务中&#xff0c;对质押物的有效监管至关重要&#xff0c;但仓储融资一般涉及到监管方、仓储方和金融机构等多套系统&#xff0c; 金融机构的系统与仓储系统不直连&#xff0c;难以实时获取质押物库存情…

【YOLOv5/v7改进系列】替换Neck为Gold-Yolo特征融合网络

一、导言 Gold-YOLO是一种高效的物体检测模型&#xff0c;它通过一种新的机制——Gather-and-Distribute&#xff08;GD&#xff09;机制来增强多尺度特征融合的能力&#xff0c;从而在保证实时性能的同时提高了检测精度。下面是对Gold-YOLO的主要特点和创新点的概述&#xff…