网站建设学习广东网站建设

乌鲁木齐市忆学创美文化传播有限公司 2026/09/09 18:57:26

直接内存的分配与回收核心是 “Native 层分配内存 + Java 层持有引用 + Cleaner 机制回收”,全程需 JVM 与操作系统协同,具体原理如下:

一、直接内存的分配原理

1. 分配触发入口
  • 核心途径:通过ByteBuffer.allocateDirect(int capacity)(JDK 推荐)或Unsafe.allocateMemory(long size)(底层 Native 调用)触发分配。
  • 关键前提:分配前会检查直接内存已用容量是否超过-XX:MaxDirectMemorySize限制,若超过直接抛出OutOfMemoryError: Direct buffer memory
2. 分配核心流程
  1. 调用 Native 方法(如Unsafe.allocateMemory),向操作系统申请 “堆外内存”(直接内存)。
  2. 操作系统在本地内存中划分一块连续空间,返回该空间的起始地址(Native 地址)。
  3. 在 Java 堆中创建DirectByteBuffer对象,该对象仅存储 “Native 地址、内存容量、读写指针” 等元数据,不存储实际数据。
  4. DirectByteBuffer关联Cleaner对象(虚引用),绑定释放直接内存的回调逻辑(Deallocator),为后续回收做准备。
  5. 返回DirectByteBuffer对象给应用程序,程序通过该对象的 API(如get()put())间接操作 Native 层的直接内存。
3. 分配关键细节
  • 分配成本:高于堆内存,需跨 JVM 与操作系统调用,且直接内存的物理空间分配由操作系统管理(如内存对齐、空间分配策略)。
  • 无冗余开销:直接内存是原生内存块,无 Java 对象头、对齐填充等堆内存特有的冗余消耗。

二、直接内存的回收原理(与前文释放流程呼应,聚焦 “原理本质”)

1. 回收的核心依赖
  • 核心机制:Cleaner虚引用 + JVM 垃圾回收,无需手动干预(Unsafe手动分配除外)。
  • 关键对象:Cleaner持有DirectByteBuffer的虚引用和Deallocator释放器,虚引用不影响DirectByteBuffer的 GC 回收。
2. 回收核心流程
  1. 应用层释放DirectByteBuffer的所有强引用(如置为null、超出作用域),使其成为 GC 不可达对象。
  2. JVM 执行 GC 时,标记DirectByteBuffer为可回收对象,同时将关联的Cleaner加入引用队列(ReferenceQueue)。
  3. JVM 后台线程ReferenceHandler扫描引用队列,发现Cleaner后调用其clean()方法。
  4. clean()方法触发Deallocatorrun()方法,通过Unsafe.freeMemory(Native地址)调用 Native 函数。
  5. 操作系统回收对应的直接内存空间,GC 后续将DirectByteBuffer从 Java 堆中彻底回收。
3. 回收关键细节
  • 回收时机:依赖 GC 触发,若 GC 迟迟不执行,即使DirectByteBuffer不可达,直接内存也不会立即释放。
  • 手动分配特例:若通过Unsafe.allocateMemory直接分配,无Cleaner关联,必须手动调用Unsafe.freeMemory释放,否则导致内存泄漏。

三、分配与回收的核心对比

环节核心操作依赖组件关键约束
分配操作系统划分配外内存,Java 堆创建引用对象UnsafeDirectByteBufferMaxDirectMemorySize和系统总内存限制
回收触发 Native 释放函数,回收堆外内存Cleaner、GC、ReferenceHandler依赖DirectByteBuff
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

网站建设报价西安企业网站建设

一文讲透RS485收发器选型:从原理到实战的硬核指南你有没有遇到过这样的场景?一个看似简单的RS485通信系统,布线几百米后开始丢包、乱码;或者

2026/06/30 12:31:31

陕西网站建设网站建设网站

Gofile下载器:告别繁琐操作的高效文件获取方案【免费下载链接】gofile-downloaderDownload files from https://gofile.io项目地址:

2026/06/30 13:24:35

专业网站建设网站建设项目

永磁同步电机模型预测控制,电流预测控制,单矢量双矢量三矢量模型预测控制,pi控制,foc控制,转矩控制玩过电机控制的都知道

2026/06/30 10:00:18

网站建设计划书天津网站建设公司

RHEL 8 中 KVM 虚拟化技术全解析1. 虚拟化技术概述虚拟化技术允许在单个主机操作系统内运行多个客户操作系统。常见的虚拟化方式有基于客户操作系统的虚拟化和基于管理程序(Hypervisor)的

2026/06/30 12:47:33

建设官方网站网站建设集团

VoxCPM-1.5-TTS-WEB-UI:高保真语音合成的平民化实践在AI音频内容爆发式增长的今天,我们不再满足于“能说话”的机器声音——从虚拟主播到有声书生成ÿ

2026/06/30 10:25:20

青岛网站建设吉林省建设厅网站

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:创建一个电商后台管理系统的仪表盘页面,使用vue-dragga

2026/06/30 14:14:10

网站建设系统南通网站建设

AutoGPT能否用于教学辅助?教师用户的使用反馈在一所重点中学的教研室里,一位高三化学老师正为即将到来的一轮复习焦头烂额。课程进度紧、学生基础参差不齐,传统

2026/06/30 12:09:29

邢台网站建设六安网站建设

智能时代的工程底座:ms-swift 如何重塑大模型落地路径在生成式AI席卷各行各业的今天,一个现实问题正困扰着无数技术团队:为什么训练了一个强大的大模型&#

2026/06/30 09:59:17

网站建设哪家网站设计与建设

心理咨询陪伴机器人设计:安全高效的AI倾听者在心理健康服务需求持续增长的今天,专业心理咨询资源却依然稀缺且分布不均。许多人因费用、 stigma 或地理位置限制而无法及时获

2026/06/30 10:16:49

龙岩网站建设商业网站建设案例课程

让Keil5说中文:从零开始的汉化实战指南你有没有过这样的经历?刚打开Keil5,准备新建一个STM32工程,结果面对满屏英文菜单一头雾水——“

2026/06/30 12:20:00