JVM知识总结(垃圾收集算法)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

垃圾收集算法

分代收集理论

分代思想就是将 分为新生代老年代 ,然后根据各个年代 的特点选择合适的垃圾收集算法

  • 新生代 中,每次收集都会有大量的对象(近99%)死去,所以选择复制算法,只需要付出少量对象的复制成本就可以完成每次收集。

  • 老年代 中,对象的存活几率较高,复制成本太高,而且没有额外的空间给它分配担保,所以必须使用标记整理算法或标记清除算法进行垃圾收集。

标记-清除算法

标记-清除算法共有两个阶段,分为标记清除

  • 标记存活的对象,也可以反过来,标记所有需要回收的对象。
  • 在标记完成后统一回收未被标记的对象。

两个明显的问题:

  • 效率问题:如果标记的对象太多,那么效率不高。
  • 空间问题:标记清除后,会产生大量不连续的碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

复制算法

它可以将内存分为大小相同的两块,每次使用其中的一块,当这一块内存使用完后,就会将存活的对象复制到另外一块去,然后把使用过的空间一次性清理掉,这样就使每次的内存回收都是对内存区间的一半进行回收。

把新生代分为一块较大的Eden空间和两块较小的Survivor空间,每次分配内存只使用Eden和其中一块Survivor。

  • 发生垃圾收集时,将Eden和Survivor中仍然存活的对象一次性复制到另外一块Survivor空间上。
  • 然后直接清理掉Eden和已用过的那块Survivor空间。

HotSpot虚拟机默认Eden和Survivor的大小比例是8∶1:

  • 即每次新生代中可用内存空间为整个新生代容量的90%(Eden的80%加上一个Survivor的10%),只有一个Survivor空间,即10%的新生代是会被浪费的。

复制算法的局限性:

  • 最大的弊端就是浪费内存空间

标记-整理算法

其中的标记过程仍然与标记-清除算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向内存空间一端移动,然后直接清理掉边界以外的内存。

标记-整理算法的缺点:

要移动存活对象,尤其是在老年代这种每次回收都有大量对象存活区域,而且这种对象移动操作必须全程暂停用户应用程序才能进行。

  • 不移动对象停顿时间会更短,如果从整个程序的吞吐量来看,移动对象会更划算。

HotSpot虚拟机里关注吞吐量的Parallel Scavenge收集器是基于标记-整理算法的。

而关注延迟的CMS收集器则是基于标记-清除算法的。

折中方案:

让JVM平时多数时间都采用标记-清除算法,暂时容忍内存碎片的存在,直到内存空间的碎片化程度已经大到影响对象分配时,再采用标记-整理算法收集一次,以获得规整的内存空间。

  • 基于标记-清除 算法的CMS收集器面临空间碎片过多时采用的就是这种处理办法。
相关推荐
ゞ 正在缓冲99%…13 分钟前
leetcode76.最小覆盖子串
java·算法·leetcode·字符串·双指针·滑动窗口
xuanjiong14 分钟前
纯个人整理,蓝桥杯使用的算法模板day2(0-1背包问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个
算法·蓝桥杯·动态规划
惊鸿.Jh33 分钟前
【滑动窗口】3254. 长度为 K 的子数组的能量值 I
数据结构·算法·leetcode
明灯L33 分钟前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题
碳基学AI39 分钟前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
补三补四43 分钟前
机器学习-聚类分析算法
人工智能·深度学习·算法·机器学习
独好紫罗兰1 小时前
洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构
开发语言·python·算法
正脉科工 CAE仿真1 小时前
基于ANSYS 概率设计和APDL编程的结构可靠性设计分析
人工智能·python·算法
Dovis(誓平步青云)2 小时前
【数据结构】排序算法(中篇)·处理大数据的精妙
c语言·数据结构·算法·排序算法·学习方法
2401_872945092 小时前
【补题】Xi‘an Invitational 2023 E. Merge the Rectangles
算法