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

Java GC 销毁机制 与 Redis 过期策略深度对比

在分布式系统开发中,“无效资源数据的清理”始终是保障服务稳定运行的核心——Java靠的是GC回收无引用(标记为不可达)的数据,Redis靠的是过期删除失效键来释放缓存空间。但底层实现,触发逻辑和设计目标却因为实际的场景有着差别。本文会从核心机制,关键差异,底层逻辑的三层来深度对比。

(今天我在学习的时候想起,这俩都是检查数据,延迟销毁,并且都会根据一个阈值来触发执行。两者看者好像,所以就打算写一篇来详细讲解下,也自我学习下。)

一.核心机制下的设计背景

我应该先简单讲解下这俩处在什么场景下。Java 是“内存中对象的自动管理”,Redis是“缓存中键值对的过期控制”,处在什么场景决定了处理清理的机制不同!

1.Java GC:位于JVM层面

Java作为面向对象的语言,开发者无需手动释放对象内存(避免C/C++内存泄漏问题),这自动释放能力依靠于垃圾回收器(GC),GC目标是:“识别并回收“不在被引用的对象”,将内存归还给JVM堆,供新对象分配使用”

完整 “三部曲” 流程如下

第一步:标记为“垃圾”

GC通过“可达性分析”判断对象是否“存活”!——如果对象没有被引用,就标记为垃圾。

第二步:触发回收

GC不会立即执行回收,而是根据JVM内存达到“阈值”时触发被动回收

  • 年轻代 GC(Minor GC):Eden 区满时触发(应用频繁创建临时对象时,几分钟一次);
  • 老年代 GC(Major GC):老年代使用率超阈值(如 70%)或年轻代对象无法晋升时触发(几小时甚至几天一次)。

第三步:销毁与内存整理
回收时会清理 “垃圾对象”,并根据回收算法(如标记 - 复制、标记 - 整理)整理内存碎片,避免内存碎片化导致 “有内存但无法分配大对象” 的问题。

2. Redis 过期策略:位于缓存层面

Redis 作为内存数据

http://www.dtcms.com/a/360266.html

相关文章:

  • 微知-Mellanox OFED编译的一些细节?无法编译怎么办?如何添加自定义编译选项?
  • linux系统学习(14.日志管理)
  • Day 01(02): 精读HDFS概念
  • QML Chart组件之图例
  • leetcode_74 搜索二维矩阵
  • tiktok弹幕 X-Bogus
  • Self-Attention的实现
  • nginx-增加VTS模块
  • [光学原理与应用-357]:ZEMAX - 分析 - 光线迹点
  • Ubuntu 中复制粘贴快捷键
  • 中国 AI 应用出海研究:出海逻辑和注意事项
  • Dreamore AI-解读并描绘你的梦境
  • USBX移植(X是eXtended的意思)
  • 基于i.MX6ULL的RAM Disk驱动开发
  • Linux目录和命令介绍
  • 如何建立奢侈品牌的数字资产安全管控体系?
  • leetcode 371 两个整数之和
  • 智能数据建设与治理 Dataphin-数仓分层
  • 基于AI的大模型在S2B2C商城小程序中的应用与定价策略自我评估
  • “机器人管家“离我们还有多远?
  • 7.3 el-menu
  • 【C2000】C2000的硬件设计指导与几点意见
  • 官方 API 与网络爬虫的技术特性对比及选型分析
  • shell编程基础入门-2
  • Overleaf中文显示
  • 把 `QVector<QPointF>` 写入文件:三种风格、三段独立可编译的完整代码
  • APB协议​​ 构建一个完整的 ​​UVM验证VIP Agent介绍类的要素
  • 《隐性质量:决定软件生命周期的看不见的竞争力》
  • 【Linux】创建线程
  • flutter工程