一、年轻代

年轻代是所有新对象产生的地方。当年轻代内存空间被用完时,就会触发垃圾回收。这个垃圾回收叫做Minor GC。年轻代被分为3个部分——Enden区和两个Survivor区。

  • 年轻代空间的要点:
  • 大多数新建的对象都位于Eden区。
  • Eden区被对象填满时,就会执行Minor GC。并把所有存活下来的对象转移到其中一个survivor区。
  • Minor GC同样会检查存活下来的对象,并把它们转移到另一个survivor区。这样在一段时间内,总会有一个空的survivor区。
  • 经过多次GC周期后,仍然存活下来的对象会被转移到年老代内存空间。通常这是在年轻代有资格提升到年老代前通过设定年龄阈值(默认15次)来完成的

二、 年老代

年老代内存里包含了长期存活的对象和经过多次Minor GC后依然存活下来的对象。通常会在老年代内存被占满时进行垃圾回收。

三、Major GC

老年代的垃圾收集叫做Major GC,Major GC通常是跟full GC是等价的,收集整个GC堆。Minor GC和Major GC其实就是年轻代GC和年老年GC的俗称。而在Hotspot VM具体实现的收集器:Serial GC, Parallel GC, CMS, G1 GC中,大致可以对应到某个Young GC和Old GC算法组合。

三、分代GC

针对HotSpot VM的实现,其实GC的准确分类可以分为:

  1. 分代GC
  1. Young GC:只收集年轻代的GC
  2. Old GC:只收集年老代的GC(只有CMS的concurrent collection是这个模式)
  3. Mixed GC:收集整个young gen以及部分old gen的GC(只有G1有这个模式)
  1. Full GC:收集整个堆,包括young gen、old gen、perm gen(如果存在的话)等所有部分的模式。

其实后续的G1的分区收集本质其实还是一个分代收集器,但是和之前的各类回收器不同,它同时兼顾年轻代和老年代。分代GC并不收集整个GC堆的模式,而是只专注分代收集

四、何时触发Full GC

  1. 当准备要触发一次young GC时,如果发现统计数据说之前young GC的平均晋升大小比目前old gen剩余的空间大,则不会触发young GC而是转为触发full GC
  2. HotSpot VM的GC里。除了CMS的concurrent collection(jdk14中已经废除)之外,其它能收集old gen的GC都会同时收集整个GC堆,包括young gen,所以不需要事先触发一次单独的young GC。
  3. 或者,如果有perm gen的话,要在perm gen分配空间但已经没有足够空间时,也要触发一次full GC
  4. 或者System.gc()、heap dump带GC,默认也是触发full GC。

Minor GC、Major GC、Full GC相关推荐

  1. LevelDB 源码剖析(八)Compaction模块:Minor Compaction、Major Compaction、文件选取、执行流程、垃圾回收

    文章目录 结构 Minor Compaction 定义 触发时机 核心要点 Major Compaction 定义 触发时机 Size Compaction Seek Compaction Manua ...

  2. Minor GC、Major GC和Full GC之间的区别(转)

    在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来介绍我所做的工作.在整个过程中,经常对 Minor.Major.和 Full GC 事件的使用感到 ...

  3. 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC

    36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...

  4. JVM学习笔记之-堆,年轻代与老年代,对象分配过程,Minor GC、Major GC、Full GC,堆内存大小与OOM,堆空间分代,内存分配策略,对象分配内存,小结堆空间,逃逸分析,常用调优工具

    堆的核心概述 概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域.Java堆区在JVM 启动的时候即被创建,其空间大小也就确定了.是JVM管理的最大一块内存空间. 堆内存的大小是可 ...

  5. 直通BAT JVM必考题:Minor GC、Major GC、Full GC的区别

    Java面试过程,JVM属于必考题系列: 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置 直通BAT必考题系列:JVM的4种垃圾回收算法.垃圾回收机制与总结 直通BAT必考题系列:7 ...

  6. Minor GC、Young GC、Old GC、Major GC、Mixed GC、Full GC都是什么?

    文章目录 各个GC的概念 1.Minor GC和Young GC 2.Old GC和Major GC 3.Mixed GC 4.Full GC 两个大类partial GC和Full GC: 各个GC ...

  7. JVM的三种常见GC:Minor GC、Major GC与Full GC

    文章目录 JVM的GC JVM GC的种类 GC的触发机制 年轻代GC(Minor GC)触发机制 老年代GC(Major GC/Full GC)触发机制 Full GC触发机制 为什么需要把Java ...

  8. Minor GC、Major GC与Full GC讲解

    Minor GC 介绍 年轻代的垃圾回收,该GC会清理伊甸园区和幸存区. 因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快. Minor GC会引发STW: ...

  9. 记录JVM中Eden区、Survivor from区和Survivor to区及Minor GC和Major GC的理解

    仅做学习笔记 JVM中Eden区.Survivor from区和Survivor to区 本文主要根据<深入理解JVM>中内存回收策略,主要关注如下五个方面: 1:Eden区分配 2:大对 ...

最新文章

  1. Pycharm 建立工程,包含多个工程目录
  2. jquery实现截取pc图片_jquery 上传图片自由截取
  3. socketserver
  4. 基于springmvc、ajax,后台连接数据库的增删改查
  5. 单片机小白学步系列(十七) 单片机/计算机系统概述:核心模块
  6. php两个数组融合,php合并两个数组的方式有哪些
  7. Docker使用Dockerfile构建简单镜像
  8. java list分批_Java实用笔记——mybatis批量导入
  9. 一个小爱好竟然改变了全世界!Linux30年都经历了什么?
  10. day17 10.jdbc的crud操作
  11. 9.企业应用架构模式 --- 领域逻辑模式
  12. 2019测试指南-web应用程序安全测试(二)识别应用程序入口点
  13. matlab信号建模,Matlab在信号处理中的建模仿真
  14. c语言程序运行的单词翻译,c语言常见英语词汇带翻译
  15. c语言实验报告评语大全,c语言实验报告(学生).doc
  16. 老外用VB6写的Windows驱动备份软件
  17. (四)keycloak 自定义用户(SPI)开发
  18. Linux下部署worldPress
  19. awk 分隔符_awk 命令快速入门
  20. Javaweb学习第三天,CSS(知识点来自广陵散老师总结)

热门文章

  1. 如何让JAVA程序实现一段时间等待
  2. LAMP搭建Discuz论坛
  3. 44)PHP,多个数据库查询(我没试)
  4. 算法:图(Graph)的遍历、最小生成树和拓扑排序
  5. 为什么现在腿会抽筋了?
  6. va_list 简介
  7. linux服务器运行matlab文件报错
  8. ALEX net 解读
  9. [云炬创业学笔记]第一章创业是什么测试2
  10. USTC English Club Note20211208