一文了解GC垃圾回收
一文了解GC垃圾回收

1 判断一个对象为垃圾对象的方法
-
引用计数法(弃用)
-
可达性分析算法
是否有指向GC root 的引用链,如果有,不是垃圾对象 ---->GC roo:即rt.jar包中内容
2 内存泄漏与内存溢出区别
泄漏:原本需要被回收的对象,没有被回收
溢出:内存空间不够用,导致溢出现象
例:
ThreadLocal
在购物车模块中,我们的实现思路是,无论登录与否,都可以添加购物车,但是在并发的情况下,就有可能会导致大量的userInfo(userkey或者UserId),如果这些
对象不能够及时被垃圾回收器清理掉,就有可能导致服务器内存不够用,从而导致服务器宕机,项目中为了解决这个问题,使用ThreadLocal的set方法保存用户对
象,通过观察源码发现,被ThreadLocal保存的对象具有弱引用的特性(发现即回收),这样就可以规避可能出现的OOM风险
3 对象引用方式
-
强引用(StrongReference)
永不回收
当一个对象被一个或多个以上的引用变量所引用时,它处于可达状态,不可能被系统垃圾回收。系统内存空间足够时,它不会被系统回收,程序也可以使用该
对象,当系统内存空间不足时,系统可能会回收它。
-
软引用(SoftReference)
内存不够就回收
系统内存空间足够时,它不会被系统回收,程序也可以使用该对象,当系统内存空间不足时,系统可能会回收它。软引用通常用于对内存敏感的程序中。
-
弱引用(WeakReference)
检测到就回收
和软引用很像,但是引用级别更低,对于弱引用而言,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的内存。当然,并不是说
当一个对象只有弱引用时,它就会立即回收——正如那些失去引用的对象一样,必须系统垃圾回收机制运行时才会被回收。
-
虚引用(PhantomReference)
虚引用主要用于跟踪对象被垃圾回收的状态,虚引用不能单独使用,虚引用必须和**引用队列联合(ReferenceQueue)**使用。单独使用虚引用没有太大意义。
虚引用主要作用就是跟踪对象垃圾回收的状态,程序可以通过检查与虚引用关联的引用队列中是否有给引用,从而了解虚引用的对象是否即将回收。
4 垃圾回收算法
1 复制算法
需要在内存中开辟两块同样大小的空间,用于复制没有被回收的对象,体现在新生区的设计思路,包含幸存0区 幸存1区
优点:
速度快
缺点:
浪费一定的内存空间
2 标记清除
扫描了整个空间两次,先进行垃圾对象的标记,在进行垃圾对象的清理
优点 :
实现简单
缺点:
- 回收效率低—>扫描了整个空间两次:第一次:标记存活对象,第二次:清除没有标记的对象
- 产生内存碎片对于需要使用连续内存空间的对象(比如数组对象)的时候,会造成空间浪费,堆利用率低
3 标记压缩
先进行垃圾对象的标记,对内存进行整理,最后对垃圾对象进行清理
优点:
内存整理,堆的浪费少,利用效率高
缺点:
至少需要扫描了整个空间三次,速度慢
4 分代收集
频繁回收新生区,较少回收养老区,基本不动元空间
新生区:用复制算法
养老区:用标记清除算法 或者 标记压缩算法
5 垃圾回收器
1 串行回收器
serial GC 新生区的垃圾对象回收 复制算法 单线程的收集器,收集垃圾时,必须stop the world
serial Old GC 养老区的垃圾对象回收 标记整理
2 并行回收器
(jdk8默认使用的垃圾回收器组合) 复制算法
parallel GC 新生区的垃圾对象回收
parallel Old GC 养老区的垃圾对象回收 标记整理
3 并发回收器
CMS(Concurrent Mark Sweep) 一款非常流行的并发回收器,目前java市面上依然有大量的公司使用该回收器回收养老区的对象,采用的垃圾回收算法::标记清除算法
parNew parallel new 并行回收新生区的一个回收器,采用的垃圾回收算法:复制算法
G1 jdk9之后默认的垃圾回收器,采用的垃圾回收算法: 标记整理算法
-
Region
- 红色:伊甸园区
- S+红色:幸存区
- 蓝色:养老区
- H+蓝色:大对象
-
Rset
用于记录一个Region中的对象是否被其他Region引用的情况
相关文章:
一文了解GC垃圾回收
一文了解GC垃圾回收 1 判断一个对象为垃圾对象的方法 引用计数法(弃用) 可达性分析算法 是否有指向GC root 的引用链,如果有,不是垃圾对象 ---->GC roo:即rt.jar包中内容 2 内存泄漏与内存溢出区别 泄漏:原本需要被回收的对象&#…...
触摸屏与施耐德PLC之间MODBUS无线通讯
一、 硬件连接 1、PLC通讯接口说明: 2、通讯电缆图: 二、PLC设置 1. 配置端口: 双击串行线路—弹出右侧设置窗口---设置串口通讯参数 2. 添加MODBUS协议。 ① 右击串口线路,选择添加设备: ② 选择现场总线…...
BOA服务器(一):简介
在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以…...
最详细STM32,cubeMX 超声波测距
这篇文章将详细介绍 STM32使用 cubeMX驱动超声波测距 。 文章目录 前言一、超声波模块测距原理 : 二、cubeMX 配置三、实验程序总结 前言 实验材料:STM32F103C8T6开发板, HC-SR04 超声波模块。所需软件:keil5 , cubeM…...
Java实现连接SQL Server解决方案及代码
下面展示了连接SQL Server数据库的整个流程: 加载数据库驱动建立数据库连接执行SQL语句处理结果关闭连接 在连接之前,前提是确保数据库成功的下载,创建,配置好账号密码。 运行成功的代码: import java.sql.*;publi…...
如何用 JMeter 编写性能测试脚本?
Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本? 1. 编写 HTTP 性能测试脚本 STEP 1. 添加 HTTP 请求 img STEP 2. 了解配置信息 HTTP 请求各项信息说明(以 JMeter 5.1 为例)。 如下图所示:…...
vue3+vite在线预览pdf
效果图 代码 <template><div class"pdf-preview"><div class"pdf-wrap"><vue-pdf-embed :source"state.source" :style"scale" class"vue-pdf-embed" :page"state.pageNum" /></div…...
Python深度学习实战-基于Sequential方法搭建BP神经网络实现分类任务(附源码和实现效果)
实现功能 第一步:导入模块:import tensorflow as tf 第二步:制定输入网络的训练集和测试集 第三步:搭建网络结构:tf.keras.models.Sequential() 第四步:配置训练方法:model.compile()&#x…...
【前端】Webpack5中Html和CSS的压缩打包
1.Webpack5简介 1.1.Webpack简介 (1)webpack的发展历程 2012.3—webpack(问世) 2014.2—webpack1 2016.12—webpack2 2017.6—webpack3 2018.2—webpack4 2020.10—webpack5(要求node版本10.13) &a…...
postman接收后端返回的文件流并自动下载
不要点send,点send and download,postman接受完文件流会弹出文件保存框让你选择保存路径...
谈谈Net-SNMP软件
Net-SNMP是一个开源的SNMP软件套件,它提供了SNMP代理(snmpd)和SNMP工具(如snmpget、snmpwalk等),可以用于监控和管理网络设备。 Net-SNMP最初是从UC Davis的SNMP软件衍生而来,现在已经成为广泛…...
前端对普通数字数组排序示例
1. arr.sort(fn) // 升序排序arr.sort((a, b) > a - b);// 降序排序arr.sort((a, b) > b - a); 2. 冒泡排序 冒泡排序-升序原理: eg: [1, 6, 7, 9, 10, 3, 4, 5, 2] 1) 先遍历第一遍数组, 前一个数字大于后一个数字, 就交换位置, 最后最大值10放在数组的最后, 此时是…...
SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等)
SQL server中:常见问题汇总 1.修改表时提示:不允许修改表结构步骤图例注意 2.将截断字符串或二进制数据。3.在将 varchar 值 null 转换成数据类型 int 时失败。4.插入insert 、更新update、删除drop数据失败,主外键FOREIGN KEY 冲突5.列不允许…...
无线通信中CSI的含义
在无线通信中,CSI代表"Channel State Information",即信道状态信息。CSI是一种关键的信息,用于评估和描述通信信道的特性,以帮助发送器和接收器在通信过程中做出智能的调整和决策。 CSI包括有关通信信道的以下信息&…...
如何一键核实验证身份证的真伪?
据报道,今年10月10日,广东省佛山市朱某因生活琐事与丈夫发生争吵,民警发现她的身份证有问题。 在民警打算进一步了解情况,查看夫妻二人的身份证件时,朱某的身份证引起了民警的注意。这张身份证表面很光滑,…...
冒泡排序:了解原理与实现
目录 原理 实现 性能分析 结论 冒泡排序(Bubble Sort)是一种简单但效率较低的排序算法。它重复地比较相邻的元素并交换位置,直到整个序列有序为止。虽然冒泡排序的时间复杂度较高,但在小规模数据集上仍然具有一定的实际应用价…...
springboot maven项目环境搭建idea
springboot maven项目环境搭建idea 文章目录 springboot maven项目环境搭建idea用到的软件idea下载和安装java下载和安装maven下载和安装安装maven添加JAVA_HOME路径,增加JRE环境修改conf/settings.xml,请参考以下 项目idea配置打开现有项目run或build打…...
vue3检测是手机还是pc端,监测视图窗口变化
1.超小屏幕(手机) 768px以下 2.小屏设备(平板) 768px-992px 3.中等屏幕(旧式电脑) 992px-1200px 4.大屏设备(现代电脑) 1200px以上 <script setup name"welcome"> i…...
B - Magical Subsequence (CCPC2021哈尔滨)
思路: (1)问题:对于已知数组,每组依次选两个,尽量选更多组,选的每组和相等;(假定和为x) (2)于是问题拆分为两步, x是多少x确定时&a…...
Leetcode刷题详解——x的平方根
1. 题目链接:69. x 的平方根 2. 题目描述: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 **注意:**不允许使用任何内置指数函数和…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
生产管理系统开发:专业软件开发公司的实践与思考
生产管理系统开发的关键点 在当前制造业智能化升级的转型背景下,生产管理系统开发正逐步成为企业优化生产流程的重要技术手段。不同行业、不同规模的企业在推进生产管理数字化转型过程中,面临的挑战存在显著差异。本文结合具体实践案例,分析…...
