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

[笔记]ByteBuffer垃圾回收

参考:https://blog.csdn.net/lom9357bye/article/details/133702169

    public static void main(String[] args) throws Throwable {List<Object> list = new ArrayList<>();Thread thread = new Thread(() -> {ByteBuffer byteBuffer = ByteBuffer.allocateDirect(11);// 步骤1byteBuffer.put(0, new byte[]{1,2,3}, 0, 3);ByteBuf byteBuf = Unpooled.wrappedBuffer(byteBuffer);// 步骤2System.out.println("byteBuf.memoryAddress():" + byteBuf.memoryAddress());list.add(byteBuf);try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("over");});thread.setName("www");thread.start();thread.join();System.gc();// 步骤3Thread.sleep(3000);list.clear();// 步骤4System.gc();Thread.sleep(3000);System.out.println("over1");}

步骤1:创建ByteBuffer
步骤2:基于之前的ByteBuffer创建ByteBuf,新建的ByteBuf与ByteBuffer共用直接内存
在这里插入图片描述
从截屏中可以看到两点
1、ByteBuffer.address与ByteBuf.memoryAddress相同
2、ByteBuf通过ByteBuf.buffer.att保留了ByteBuffer的引用,这样即使ByteBuffer已经没有被直接使用,但只要ByteBuf还在,就不会回收ByteBuffer下的直接内存。

步骤3:在ByteBuffer尚有引用(list存储了ByteBuf,ByteBuf中保留了ByteBuffer的引用)的情况下,触发gc,不会回收ByteBuffer的空间

步骤4:第二次gc时无ByteBuffer引用,所以会清理其空间

第一次gc
在这里插入图片描述

清理的是其他空间
在这里插入图片描述

第二次gc时清理的是之前代码中手动分配的空间
在这里插入图片描述

相关文章:

[笔记]ByteBuffer垃圾回收

参考&#xff1a;https://blog.csdn.net/lom9357bye/article/details/133702169 public static void main(String[] args) throws Throwable {List<Object> list new ArrayList<>();Thread thread new Thread(() -> {ByteBuffer byteBuffer ByteBuffer.alloc…...

c++ opencv中unsigned char *、Mat、Qimage互相转换

unsigned char * 转Mat unsinged char * data img.data; Mat mat (h,w,cv_8UC3,data,0);void * 转Qimage uchar * bit (uchar*)pRknnInputData; QImage image QImage(bit, 2048,1536, QImage::Format_RGB888);qimage转Mat QImage image QImage (MODEL_INPUT_WIDTH_SIZE,MODE…...

法线贴图实现衣服上皱褶特效

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 法线贴图在3D建模中扮演着重要的角色&#xff0c;它通过模拟表面的微…...

2017年第六届数学建模国际赛小美赛B题电子邮件中的笔迹分析解题全过程文档及程序

2017年第六届数学建模国际赛小美赛 B题 电子邮件中的笔迹分析 原题再现&#xff1a; 笔迹分析是一种非常特殊的调查形式&#xff0c;用于将人们与书面证据联系起来。在法庭或刑事调查中&#xff0c;通常要求笔迹鉴定人确认笔迹样本是否来自特定的人。由于许多语言证据出现在电…...

CentOS安装Python解释,CentOS设置python虚拟环境,linux设置python虚拟环境

一、安装python解释器 1、创建解释器安装的目录&#xff1a;/usr/local/python39 cd /usr/local mkdir python39 2、下载依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel xz-devel …...

在线智能防雷监控(检测)系统应用方案

在线智能防雷监控系统是一种利用现代信息技术&#xff0c;对防雷设施的运行状态进行实时监测、管理和控制的系统&#xff0c;它可以有效提高防雷保护的安全性、可靠性和智能化程度&#xff0c;降低运维成本和风险&#xff0c;为用户提供全方位的防雷解决方案。 在线智能防雷监控…...

flutter + firebase 云消息通知教程 (android-安卓、ios-苹果)

如果能看到这篇文章的 一定已经对手机端的 消息推送通知 有了一定了解。 国内安卓厂商这里不提都有自己的FCM 可自行查找。&#xff08;国内因无法科学原因 &#xff0c;不能使用谷歌服务&#xff09;只说海外的。 目前 adnroid 和 ios 推送消息分别叫 FCM 和 APNs。这里通过…...

2024年PMP考试新考纲-PMBOK第七版-项目管理原则真题解析

从战争中学习战争。对于参加2024年PMP考试的小伙伴来说&#xff0c;最有效的学习方式是这样地&#xff1a;①阅读了教材&#xff08;PMBOK6、7和敏捷&#xff09;&#xff0c;了解基本概念&#xff1b;②反复刷近期的PMP考试真题&#xff0c;查漏补缺。 为此&#xff0c;华研荟…...

vscode开发python环境配置

前言 vscode作为一款好用的轻量级代码编辑器&#xff0c;不仅支持代码调试&#xff0c;而且还有丰富的插件库&#xff0c;可以说是免费好用&#xff0c;对于初学者来说用来写写python是再合适不过了。下面就推荐几款个人觉得还不错的插件&#xff0c;希望可以帮助大家更好地写…...

数据库客户案例:每个物种都需要一个数据库!

1、GERDH——花卉多组学数据库 项目名称&#xff1a;GERDH&#xff1a;花卉多组学数据库 链接地址&#xff1a;https://dphdatabase.com 项目描述&#xff1a;GERDH包含了来自150多种园艺花卉植物种质的 12961个观赏植物。将不同花卉植物转录组学、表观组学等数据进行比较&am…...

数据分析思维导图

参考&#xff1a; https://zhuanlan.zhihu.com/p/567761684?utm_id0 1、数据分析步骤地图 2、数据分析基础知识地图 3、数据分析技术知识地图 4、数据分析业务流程 5、数据分析师能力体系 6、数据分析思路体系 7、电商数据分析核心主题 8、数据科学技能书知识地图 9、数据挖掘…...

网络基础【网线的制作、OSI七层模型、集线器、交换机介绍、路由器的配置】

目录 一.网线的制作 1.1.网线的标准 1.2.水晶头的做法 二.OSI七层模型、集线器、交换机介绍 集线器&#xff08;Hub&#xff09;&#xff1a; 交换机&#xff08;Switch&#xff09;&#xff1a; 三.路由器的配置 3.1.使用 3.2.常用的功能介绍 1、如何管理路由器 2、家…...

C++中的继承(二)

文章目录 前言多继承虚继承虚继承的底层组合 前言 上一篇文章我们C的正常继承其实已经讲完了&#xff0c;但是后面还有一个大坑。 实际当中继承有单继承和多继承。 单继承就是直接继承一个类。 只有一个直接父类的就叫做单继承。 如果是单继承那就比较简单。 现实世界除了有…...

sklearn多项式回归和线性回归

什么是线性回归&#xff1f; 回归分析是一种统计学方法&#xff0c;用于研究自变量和因变量之间的关系。它是一种建立关系模型的方法&#xff0c;可以帮助我们预测和解释变量之间的相互作用。 回归分析通常用于预测一个或多个因变量的值&#xff0c;这些因变量的值是由一个或多…...

Postman报:400 Bad Request

● 使用Postman发送Post请求报400&#xff0c;入参为JSON&#xff1b; 二、分析 1、Postman请求并没有请求到后台Api&#xff08;由于语法错误&#xff0c;服务器无法理解请求&#xff09;&#xff1b; 2、入参出错范围&#xff1a;cookie、header、body、form-data、x-www-f…...

apache poi_5.2.5 实现表格内某一段单元格的复制

apache poi_5.2.5 实现表格内&#xff0c;某一段单元格的复制。 实现思路 1.定位开始位置 2.从开始位置之后&#xff0c;在行索引集合中添加行索引下标 3.截至到结束位置。 4.对行索引集合去重&#xff0c;并循环行索引集合 5.利用XWPFTableRow对像的getCtRow().copy()方法&a…...

Oracle重建索引详解

更新&#xff1a;2023-05-17 18:08 一、Oracle重建索引命令 Oracle重建索引可以通过ALTER INDEX命令来完成。下面是示例代码&#xff1a; ALTER INDEX index_name REBUILD [PARAMETERS];其中&#xff0c;index_name是需要重建的索引名称&#xff0c;PARAMETERS是可选的重建参…...

众和策略证券开户首选:股票增持是好还是坏?大股东增持规定?

股票增持是好仍是坏&#xff1f; 股东增持在一定程度上反映股东对个股比较看好&#xff0c;大量的买单&#xff0c;增加了市场上的多方力气&#xff0c;会推动股价上涨&#xff0c;是一种利好消息。 一般大股东会增持可能是上市公司运营成绩较好&#xff0c;具有较大的发展前…...

UE4移动端最小包优化实践

移动端对于包大小有着严苛的要求,然而UE哪怕是一个空工程打出来也有90+M,本文以一个复杂的工程为例,探索怎么把包大小降低到最小。 一、工程简介 工程包含代码、插件、资源、iOS原生库工程。 二、按官方文档进行基础优化 官方文档 1、勾选Use Pak File和Create comp…...

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框&#xff0c;也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update&#xff0c;更新下 1.4.1 更新中 1.4.2 Restart IDE 1…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...