一文了解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 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 **注意:**不允许使用任何内置指数函数和…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...