JVM 新生代垃圾回收如何避免全堆扫描?

在 JVM 新生代的垃圾回收(Minor GC)过程中,为了提高效率并减少回收时间,垃圾收集器会避免对整个堆(包括新生代和老年代)进行扫描。以下是 JVM 如何实现这一优化的核心机制。


1. 全堆扫描的代价

全堆扫描意味着垃圾回收器需要遍历整个老年代的对象,寻找其中引用新生代对象的部分。这会导致以下问题:

  • 增加垃圾回收的耗时。
  • STW(Stop-The-World)暂停时间更长,影响应用性能。

2. 避免全堆扫描的机制

JVM 使用以下机制在新生代垃圾回收时避免全堆扫描:

2.1 分代垃圾回收策略

JVM 将堆分为 新生代老年代,并对新生代和老年代分别进行垃圾回收。这种分代回收策略本身减少了扫描范围,使得 Minor GC 只需关注新生代中的对象,而无需处理老年代中大部分对象。


2.2 卡表(Card Table)

  • 卡表是一种基于内存区域的记录结构,用于跟踪老年代中引用新生代的对象。
  • 堆内存被划分为许多小的卡片(Card),每张卡片对应一段内存区域。
  • 卡表的原理
    1. 当老年代的对象引用新生代对象时,对应的卡片会被标记为“脏卡”。
    2. 在 Minor GC 期间,垃圾回收器只需扫描卡表中被标记为脏卡的区域,而不是整个老年代。

示例:

假设老年代有 100 个对象区域,但只有 5 个区域的对象引用了新生代。通过卡表,GC 只需扫描这 5 个区域,而无需遍历整个老年代。


2.3 记忆集(Remembered Set, RSet)

  • 记忆集 是一种用于记录跨代引用的优化结构,跟踪老年代对新生代的引用。
  • 每个垃圾回收区域都维护一个记忆集,记录哪些老年代对象引用了当前区域内的新生代对象。
  • 作用
    • 记忆集将 GC 的扫描范围限制在老年代的少量引用上,从而避免全堆扫描。

2.4 根集跟踪(Root Set Tracking)

  • 在进行垃圾回收时,GC 首先从 GC Roots 开始扫描。GC Roots 包括:

    • 栈中的局部变量。
    • 静态变量。
    • JNI 引用。
  • GC Roots 不会直接涉及整个老年代,因此通过根集扫描也避免了全堆扫描。

3. 卡表与记忆集的关系

  • 卡表 是一种较为粗粒度的机制,基于内存地址范围进行标记。
  • 记忆集 则是较为精细的机制,直接记录具体的跨代引用。
  • 两者可以结合使用:卡表用于快速定位,记忆集用于精确扫描。

4. 垃圾回收器对优化的支持

以下是支持上述优化的常见垃圾收集器:

  • Serial GC 和 Parallel GC:使用卡表和根集扫描。
  • CMS(Concurrent Mark-Sweep):通过记忆集避免全堆扫描。
  • G1 GC:在每个分区(Region)中维护记忆集,同时结合卡表加速扫描。

5. 总结

JVM 新生代垃圾回收通过卡表、记忆集和根集跟踪等机制有效避免了全堆扫描。这些优化使 Minor GC 的执行时间显著减少,提高了系统的吞吐量和响应能力。

关键点:

  1. 卡表:快速标记老年代中引用新生代的区域。
  2. 记忆集:记录跨代引用的精确信息。
  3. 分代回收:限制回收范围,减少不必要的扫描。
  4. 根集跟踪:通过 GC Roots 启动扫描,进一步优化垃圾回收性能。

JVM 新生代垃圾回收如何避免全堆扫描?的更多相关文章

  1. JVM实用参数——新生代垃圾回收

    JVM实用参数目录 JVM实用参数——新生代垃圾回收 概述 第1部分  新生代垃圾回收介绍 第2部分 参数介绍 参考 第1部分  新生代垃圾回收介绍 本部分,我们将关注堆(heap) 中一个主要区域, ...

  2. JVM(三) 垃圾回收时间点和垃圾收集器

      收集器组合章节来自第一篇参考文章,非原创,作者总结地非常好!          分代收集相关概念来自参考文章第二篇,非原创         第二篇参考资料的文章质量很高,推荐阅读! 分代收集(Ge ...

  3. JVM虚拟机垃圾回收(GC)算法及优缺点

    一.什么是GC   GC是jvm的垃圾回收,垃圾回收的规律和原则为:   次数上频繁收集新生区(Young)   次数上较少收集养老区(Old)   基本上不动永久区(Perm) 二.GC算法(分代收 ...

  4. JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

     相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术 ...

  5. 扒一扒JVM的垃圾回收机制,下次面试你准备好了吗

      相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技 ...

  6. jvm虚拟机--垃圾回收子系统

    转载自cyc2018的github:https://github.com/CyC2018/Interview-Notebook/blob/master/notes/Java%20%E8%99%9A%E ...

  7. JVM总结-垃圾回收(下)

    大部分的 Java 对象只存活一小段时间,而存活下来的小部分 Java 对象则会存活很长一段时间. 之所以要提到这个假设,是因为它造就了 Java 虚拟机的分代回收思想.简单来说,就是将堆空间划分为两 ...

  8. JVM(九):垃圾回收算法

    JVM(九):垃圾回收算法 在本文中,我们将从概念模型的角度探讨 JVM 是如何回收对象,包括 JVM 是如何判断一个对象已经死亡,什么时候在哪里进行了垃圾回收,垃圾回收有几种核心算法,每个算法优劣是 ...

  9. JVM G1垃圾回收算法简要介绍

    JVM G1垃圾回收算法简要介绍 G1的特点 能够像CMS垃圾回收算法一样并发操作应用线程(潜台词:多核) 无需太长时间即可压缩空闲内存空间(潜台词:不会引起太多的GC停顿时间) 尽可能地让GC时长可 ...

  10. Java学习之二(线程(了解) JVM GC 垃圾回收)

    线程与进程(了解)→JVM→字节码→GC 一.程序 = 算法 + 数据结构(大佬) 二.程序 = 框架 + 业务逻辑(现实) 1.线程与进程.同步与异步 1.1进程是什么? 进程就是操作系统控制的基本 ...

随机推荐

  1. VuePress 博客之 SEO 优化(四) Open Graph protocol

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  2. Nodejs 实现一个CRC16校验

    近日在开发一个数据平台,据说nodejs比较适合DIRT类型的程序,所以也搞了一把,虽然接收.转发及其报文解析等功能顺利的实现了,但是由于某些报文涉及到应答,故而需要CRC校验,也算是一个小坑吧,故而 ...

  3. oracle goldengate for downstreams 配置--for 数据库参数配置和ogg进程参数配置

    1.整体数据库配置三个源端和一个downstream下游抽取数据库配置:alter system set enable_goldengate_replication=TRUE;Alter databa ...

  4. 解决云电脑无法使用本地终端连接的USB设备

    本文分享自天翼云开发者社区<解决云电脑无法使用本地终端连接的USB设备>,作者:2****m 云计算技术的广泛应用已经改变了我们对计算资源的使用方式.云电脑作为云计算的一个重要应用场景,提 ...

  5. 2021 OWASP TOP 10

    OWASP TOP 10 2021年版Top 10有哪些变化? 2021年版Top 10产生了三个新类别,原有四个类别的命名和范围也发生了变化,且进行了一些 整合. 2017年 TOP 10 top ...

  6. Flink Maven项目,依赖配置pom.xml

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  7. RabbitMQ(六)——路由模式

    RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...

  8. 百万架构师第四十二课:Nginx:Nginx 的初步认识|JavaGuide

    百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 Nginx 的初步认识及配置 课程目标 Nginx 在分布式架构中的应用分析 常用的 Web ...

  9. 使用DeepSeek-R1分析电影票房

    最近在学习DeepSeek-R1本地化部署的相关知识,看到了1个比较有意思的视频. 在该视频中,其主要逻辑就是当用户上传1个Excel后,之后就可以通过交互式的方式对这个Excel中的数据进行分析.但 ...

  10. NCS开发学习笔记-基础篇-第 1 课 – nRF Connect SDK 简介

    第 1 课 – nRF Connect SDK 简介 目标 了解 nRF Connect SDK 的结构和内容 在内部,nRF Connect SDK 代码分为四个主要存储库: nrf – 应用程序. ...