Java&Go 内存管理

前言

记录一下一些内存管理的知识点,本文会不断更新...

something

Java 四种引用类型对比

引用类型 类名 GC 行为 用途类比 何时被回收
强引用 (默认) 绝不回收 必需品 永远不回收,除非断开引用 (obj = null)
软引用 SoftReference 内存不足时回收 缓存 内存不足,即将抛出 OutOfMemoryError 之前
弱引用 WeakReference 发现即回收 临时映射/监听器 只要发生 GC,无论内存是否充足,都会立即回收
虚引用 PhantomReference 随时回收 对象回收跟踪 随时可能被回收,无法通过它获取对象

Go与Java内存管理对比

特性 Java Go
内存管理方式 基于可达性分析的垃圾回收,通过引用链判断对象是否存活 基于三色标记法的垃圾回收,追踪对象引用关系
引用类型 有 4 种明确的引用类型,让开发者参与内存管理决策 只有一种强引用,所有引用都是"强引用"
哲学差异 给开发者更多控制权,但需要更复杂的理解 追求简单性,让 GC 自动管理一切,减少心智负担

Java引用场景对应Go方案

Java 场景 Go 推荐方案
软引用缓存 使用 go-cache 等带 TTL/LRU 的缓存库
弱引用映射 使用 sync.Map + 定期清理或事件驱动清理
监听器列表 使用 channel + context 模式
资源清理 实现 Close() 方法 + defer 语句
虚引用跟踪 使用结构化日志 + 监控指标,而非终结器
相关推荐
Mr.朱鹏3 分钟前
分布式-redis集群架构
java·redis·分布式·后端·spring·缓存·架构
予枫的编程笔记4 分钟前
【面试专栏|Java并发编程】Java并发锁对比:synchronized与Lock,底层原理+适用场景详解
java·synchronized·java面试·java并发编程·并发锁·面试干货·lock接口
醇氧5 分钟前
PowerPoint 批量转换为 PDF
java·spring boot·spring·pdf·powerpoint
java1234_小锋6 分钟前
Java高频面试题:RabbitMQ如何实现消息的持久化?
java·开发语言
爱打代码的小林13 分钟前
用 LangChain 解析大模型输出
java·python·langchain·大模型
_日拱一卒15 分钟前
LeetCode(力扣):只出现一次的数字
java·数据结构·算法
小箌16 分钟前
JavaWeb_02
java·数据库·maven·mybatis
gxy19902618 分钟前
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
java·spring boot·spring
阿杰真不会敲代码18 分钟前
Elasticsearch 入门到实战:安装 + CRUD + 查询
java·大数据·elasticsearch·搜索引擎
老邋遢20 分钟前
干货篇|02. 纯AI Coding商业应用
java·人工智能