讲师中心 微信公众号
AI工具推荐 视频效率加速

JVM中堆外内存(Direct Memory)的回收何时与传统共享堆内垃圾收集器产生联动

夏辰吖_3133

夏辰吖_3133

发布时间:2026-06-08 16:41:50

|

664人浏览过

|

来源于php中文网

原创

堆外内存回收依赖DirectByteBuffer对象被GC回收后触发Cleaner清理,不参与JVM堆内GC流程;Full GC仅在Direct Buffer OOM且MaxDirectMemorySize受限时被动触发,G1/ZGC等新收集器亦无特殊优化。

jvm中堆外内存(direct memory)的回收何时与传统共享堆内垃圾收集器产生联动

堆外内存(Direct Memory)的回收本身不参与JVM堆内GC流程,但它会在特定条件下触发或依赖传统垃圾收集器的联动行为。这种联动不是主动协作,而是被动响应——核心在于DirectByteBuffer对象的生命周期结束时机。

DirectByteBuffer对象是堆外内存回收的“开关”

每个DirectByteBuffer实例在堆内只占几十字节(对象头+address、capacity等字段),真正数据存于堆外。JVM无法直接感知堆外内存是否该释放,只能等这个“壳子”被GC判定为不可达并回收时,才顺带清理它背后的堆外空间。

  • 只要DirectByteBuffer对象仍被强引用(比如放在静态Map里、未close、未置null),哪怕堆外已闲置,内存就一直占用
  • 一旦GC将该对象回收,其内部关联的Cleaner会被唤醒,调用Unsafe.freeMemory释放对应堆外地址
  • 这个过程发生在GC完成后的Reference Handler线程中,不是GC线程本身执行,但强依赖GC的标记与回收动作

Full GC可能被显式用来“逼出”堆外内存回收

当Direct Buffer分配失败抛出java.lang.OutOfMemoryError: Direct buffer memory时,JVM会尝试触发一次Full GC——目的是尽快回收那些已失去引用的DirectByteBuffer对象,从而释放它们持有的堆外内存。

  • 这属于“兜底机制”,并非每次DirectBuffer分配都会触发,仅在-XX:MaxDirectMemorySize设限且已达上限时发生
  • 若堆内存在大量未被回收的DirectByteBuffer(比如因弱引用/软引用未及时清理、或对象长期存活在老年代),Full GC未必能立刻释放足够堆外空间
  • 该行为受-XX:+DisableExplicitGC影响:若禁用System.gc(),此自动触发也可能被抑制(取决于JVM版本和GC策略)

元空间与堆外内存无直接联动,但间接影响GC频率

元空间(Metaspace)不足引发的Full GC,本身不释放堆外内存;但它会增加GC压力,可能延缓DirectByteBuffer对象进入回收队列的时间。

  • 频繁元空间GC → 应用暂停增多 → 弱引用队列处理延迟 → Cleaner注册滞后 → 堆外内存释放变慢
  • 尤其在类加载密集场景(如热部署、OSGi),元空间膨胀可能挤占GC资源,间接拖累堆外内存回收效率

G1与ZGC等新收集器对堆外回收无特殊优化

目前主流GC算法(包括G1、ZGC、Shenandoah)均未将堆外内存纳入其并发标记或回收阶段。它们仍遵循同一逻辑:只管堆内对象可达性,Cleaner机制保持不变。

  • G1的Mixed GC不会扫描DirectByteBuffer的堆外引用关系
  • ZGC的并发标记只遍历Java堆,不检查本地内存映射
  • 所有堆外释放仍由Reference Handler线程串行执行,存在潜在瓶颈

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6627

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2748

2023.08.10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

20

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

20

2026.11.04

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

20

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

20

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
JDK 27官方文档
JDK 27官方文档

共0课时 | 0人学习

Go语言教程-全程干货无废话
Go语言教程-全程干货无废话

共100课时 | 18.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn