type
status
date
slug
summary
tags
category
icon
password

JVM 的 GC(垃圾回收)执行时机

JVM的垃圾回收(GC)机制是用来自动管理内存的重要组成部分。GC 的执行时机并不是随意的,而是由JVM的垃圾回收器根据特定的条件和算法触发的。以下是触发GC的几种常见情况:
  1. 内存分配失败:当应用尝试分配对象,但堆内存不足以容纳新对象时,GC会被触发尝试释放内存。
  1. 系统空闲:当系统处于空闲状态时,JVM可能会触发GC以优化内存使用和性能。
  1. Eden区满时:对于采用分代回收的垃圾回收器(如G1或CMS),当新生代的Eden区满时,会触发一次年轻代的垃圾回收。
  1. Old区接近满时:老年代接近其最大容量时,会触发完全垃圾回收(Major GC或Full GC)。
  1. 显示调用:通过调用System.gc(),可以建议JVM执行垃圾回收,但是否执行以及执行时机取决于JVM的判断和垃圾回收器的实现。

安全点(Safepoint)

在谈论JVM的垃圾回收时,“安全点”(Safepoint)是一个重要概念。安全点是程序执行中的特定位置,JVM只在这些点上暂停应用线程来执行垃圾回收。安全点的选择是为了确保在任何时刻,对象的引用关系对垃圾回收器来说都是一致和可预测的。这样可以简化垃圾回收过程,并减少对应用性能的影响。
  1. 何时达到安全点
      • 程序执行长时间运行的循环时。
      • 方法返回前。
      • 调用方法前后。
      • 抛出异常时。
  1. 为什么需要安全点
      • 为了垃圾回收的准确性和效率。GC需要在对象引用关系不变时分析和移动对象,因此需要在这些安全点上暂停线程。
  1. 线程达到安全点的方式
      • 主动模式:线程主动检查是否需要暂停到安全点。
      • 被动模式:当GC需要执行时,JVM会发出信号让运行的线程在达到下一个安全点时暂停。

总结

JVM的垃圾回收执行时机取决于多种因素,包括内存使用情况、垃圾回收算法、JVM的策略等。安全点是GC执行期间确保内存一致性和准确性的关键机制。理解这些概念对于深入理解JVM的内存管理和性能优化至关重要。
JVM内存模型与Java线程内存模型的区别CMS垃圾收集器的并发更新失败是怎么回事?如何优化?
Loading...
奥利弗
奥利弗
巴塔哥尼亚的门徒
最新发布
🎨 一键转换,让你的 SVG 飞起来!——介绍「SVG 魔法转换器」
2025-4-30
🚀 告别繁琐,实时掌握币圈脉搏!全新加密货币实时行情追踪神器上线!
2025-4-28
厌倦了千篇一律的鸡汤?来点“毒”的,再加点暖和和疯狂星期四的快乐!
2025-4-28
用呼吸找回内心的平静:一款简单有效的在线冥想工具
2025-4-23
谁在剥夺骑手的自由?——从“外卖平台二选一”事件看平台责任与底层困局
2025-4-21
手把手教你制作吉卜力风格的微信表情包!
2025-4-17
公告
 
世界和平!