jvm垃圾回收相关的算法

什么是垃圾

JVM主要通过以下几种方式来判断对象是否需要回收:

  1. 引用计数法:JVM通过引用计数器来判断对象的引用数量,当引用数量为0时,表示对象可以被回收。

  2. 可达性分析算法:JVM通过根对象(如栈中的引用、静态变量等)出发,对对象进行可达性分析,判断对象是否可被访问到,如果不可达,则表示对象可以被回收。

  3. 年龄判断:对于分代垃圾回收算法,JVM会根据对象的存活时间来判断对象是否需要回收,存活时间较长的对象会被移到老年代,存活时间较短的对象会被回收。

  4. 标记阶段:在标记-清除、标记-整理等算法中,JVM会通过标记活动对象来判断哪些对象可以被回收。

这些方法结合起来,帮助JVM判断哪些对象可以被回收,从而进行垃圾回收操作。

垃圾回收算法

垃圾回收算法 区别
标记-清除算法 通过标记所有活动对象,然后清除所有未标记的对象来回收内存。但会产生内存碎片
复制算法 将内存分为两块,每次只使用其中一块,当这一块内存满了,就将存活的对象复制到另一块内存中,然后清除当前内存中的所有对象。不会产生内存碎片
标记-整理算法 类似于标记-清除算法,但在清除之后会将存活的对象向一端移动,整理出连续的内存空间。减少内存碎片的产生
分代算法 将内存分为新生代和老年代,新生代使用复制算法,老年代使用标记-整理算法,根据对象的存活时间来进行不同的垃圾回收处理
并发标记清除算法 在标记和清除阶段尽可能与程序并发执行,减少停顿时间

几个主流的垃圾回收器

特征 CMS G1 ZGC
垃圾回收类型 并发标记-清除 并发标记-整理 并发标记-整理
目标 减少停顿时间 综合性能和停顿时间 低停顿时间和高吞吐量
内存分区 以老年代为主 将堆划分为多个区域 不需要分代,整个堆都是一致的
停顿时间 有可能出现较长的停顿时间 相对较稳定的停顿时间 尽可能短的停顿时间
内存占用 中等
适用场景 适用于内存较大、应用线程较少的场景 适用于大内存、多核处理器的场景 适用于需要低延迟和大堆的场景

这些垃圾回收器各有其特点,可以根据具体的应用场景和需求来选择最合适的垃圾回收器。

相关推荐
yaoh.wang21 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
T1ssy1 天前
布隆过滤器:用概率换空间的奇妙数据结构
算法·哈希算法
醇氧1 天前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
sunxunyong1 天前
doris运维命令
java·运维·数据库
菜鸟起航ing1 天前
Spring AI 全方位指南:从基础入门到高级实战
java·人工智能·spring
古城小栈1 天前
Docker 多阶段构建:Go_Java 镜像瘦身运动
java·docker·golang
hetao17338371 天前
2025-12-12~14 hetao1733837的刷题笔记
数据结构·c++·笔记·算法
华仔啊1 天前
这 10 个 MySQL 高级用法,让你的代码又快又好看
后端·mysql
MapGIS技术支持1 天前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
Coder_Boy_1 天前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务