首页 > 其他分享 >Minor GC、Major GC、Full GC

Minor GC、Major GC、Full GC

时间:2024-03-19 17:48:28浏览次数:30  
标签:Major Full 收集 Eden 新生代 GC Minor

转载自:

https://blog.csdn.net/xiaojin21cen/article/details/87779487

https://blog.csdn.net/zs18753479279/article/details/119341774

=====================

 

 

Java7及以前版本的Hotspot中方法区位于永久代中。同时,永久代和堆是相互隔离的,但它们使用的物理内存是连续的。

堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。而新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。

新生代中一般保存新出现的对象,所以每次垃圾收集时都发现大批对象死去,只有少量对象存活,便采用了复制算法,只需要付出少量存活对象的复制成本就可以完成收集。

老年代中一般保存存活了很久的对象,他们存活率高、没有额外空间对它进行分配担保,就必须采用“标记-清理”或者“标记-整理”算法。

永久代就是JVM的方法区。在这里都是放着一些被虚拟机加载的类信息,静态变量,常量等数据。这个区中的东西比老年代和新生代更不容易回收。

1、按照 回收区域 划分的GC 分类

JVM在进行GC时,并非每次对三个内存(新生代、老年代、方法区)区域一起回收,大部分时候回收的都是新生代。

针对Hotspot VM 的实现,它里面的GC按照回收区域分为两种大类:一种是部分收集(Partial GC),另一种是整堆收集(Full GC)

1、部分收集(Partial GC):只针对部分区域进行垃圾收集。其中又分为:
	1.1、新生代收集(Minor GC/Young GC):只针对新生代的垃圾收集。具体点的是Eden区满时触发GC。
										Survivor满不会触发Minor GC 。
	1.2、老年代收集(Major GC/Old GC):只针对 老年代的垃圾收集。
		目前,只有CMS收集器会有单独收集老年代的行为。
		注意,很多时候,Major GC 会和Full GC混淆使用,需要具体分辨是老年代的回收还是整堆回收。
	
	1.3、混合收集(Mixed GC):指目标是收集整个新生代以及部分老年代的垃圾收集。
		目前只有G1收集器会有这种行为。
		
2、整堆收集(Full GC):收集整个Java堆和方法区的垃圾收集。	

 

2、Minor GC、Major GC、Full GC 的简单说明

2.1、Minor GC

当年轻代(Eden区)满时就会触发 Minor GC,这里的年轻代满指的是 Eden区满。Survivor 满不会触发 Minor GC 。

从年轻代空间(主要是 Eden区)回收内存被称为 Minor GC。

发生Minor GC事件需要注意:

  1. 当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。

  2. 内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。

  3. 执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。

  4. 对于大部分应用程序,Minor GC 操作时应用程序停顿导致的延迟都是可以忽略不计的。因为,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。

2.2、Major GC

CMS收集器中,当老年代满时会触发 Major GC。

目前,只有CMS收集器会有单独收集老年代的行为。其他收集器均无此行为。

针对新生代(主要指Eden区)的Minor GC 比较常见,各个收集器均支持。

通常能单独发生收集行为的只是新生代的Minor GC,所以这里“反过来”的情况只是理论上允许,实际上除了CMS收集器,其他都不存在只针对老年代的收集。(英文翻译过来的,要细品!)

2.3、Full GC

Full GC 对收集整堆(新生代、老年代)和方法区的垃圾收集。

当年老代满时会引发Full GC,Full GC将会同时回收新生代、年老代 ;
当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载 。

(1)调用System.gc时,系统建议执行Full GC,但是不一定会执行 。
(2)老年代空间不足
(3)方法区空间不足
(4)通过 Minor GC 后进入老年代的空间大于老年代的可用内存
(5)由Eden区、S0(或S1)区向 S1(或S0)区复制时,对象大小大于To Space可用内存,则把该对象直接转存到老年代,且老年代的可用内存小于该对象大小 。

 

3、总结

    • Minor GC 是 清理 新生代中的Eden区,Survivor区满时不会触发 ;
    • Major GC 是 清理 老年代 ;
    • Full GC 是 清理整个堆和方法区,包括 年轻代、老年代和方法区。

标签:Major,Full,收集,Eden,新生代,GC,Minor
From: https://www.cnblogs.com/hd92/p/18083539

相关文章

  • langchain chatchat运行机制源码解析
    langchainchatchat的简介就不多说了,大家可以去看github官网介绍,虽然当前版本停止了更新,下个版本还没有出来,但作为学习还是很好的。一、关键启动过程:1、start_main_server入口2、run_controller启动fastchatcontroller端口200013、run_openai_api启动fastchat对外提供的类......
  • java GC Collector
    java垃圾收集器#最小堆值,不设置默认为操作系统1/64-Xms4G#最大堆值,不设置默认为操作系统1/4-Xmx4GG1jdk9开始默认启用,显示启用-XX:+UseG1GC介绍服务器级计算机上的垃圾优先(G1)收集器,否则为串行收集器。GC线程的最大数量受堆大小和可用CPU资源的限制初始堆......
  • AIGC之入门之详细介绍
    一、AIGC初识AIGC,即ArtificialIntelligenceGeneratedContent,指的是生成式人工智能。它可以通过处理人的自然语言,对AI下达指令任务,从而自动生成图片、视频、音频等内容。至于AIGC中的StableDiffusion,它可能指的是一种特定的生成模型或技术。StableDiffusion在AIGC领域中......
  • GPT实战系列-LangChain的Prompt提示模版构建
    GPT实战系列-LangChain的Prompt提示模版构建LangChainGPT实战系列-LangChain如何构建基通义千问的多工具链GPT实战系列-构建多参数的自定义LangChain工具GPT实战系列-通过Basetool构建自定义LangChain工具方法GPT实战系列-一种构建LangChain自定义Tool工具的简单方法G......
  • 【PostgreSQL PGCE-091题目解析14】PostgreSQL中使用CONCURRENTLY选项创建索引时,允许
    本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。PostgreSQL中使用CONCURRENTLY选项创建索引时,允许增删改数据表。A.正确B.错误参考答案:A解析:我们知道,PG是有行级琐的,在创建索引的时候,会在行上加琐......
  • vim,gcc,gdb与Makefile的使用
    一、Linux编辑器-vim使用1.vim的基本概念vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下(1)正常/普通/命令模式(Normalmode)控制屏幕光标的移动,字符、字或行的删除,移动复制......
  • 论文解读(CGC)《Generating Counterfactual Hard Negative Samples for Graph Contrasti
    Note:[wechat:Y466551|可加勿骚扰,付费咨询]论文信息论文标题:GeneratingCounterfactualHardNegativeSamplesforGraphContrastiveLearning论文作者:论文来源:2023WWW论文地址:download 论文代码:download视屏讲解:click0-摘要图对比学习已经成为一种强大的无监督图......
  • 【每日算法】常见AIGC模型; 刷题:力扣单调栈
    上期文章【每日算法】理论:生成模型基础;刷题:力扣单调栈文章目录上期文章一、上期问题二、理论问题1、stablediffusion模型的网络架构2、T5的网络架构(Text-To-TextTransferTransformer模型)3、SDXL模型4、DALLE5、BPE编码6、为什么DDPM加噪声的幅度是不一致的?三、力......
  • 本地部署 Langchain-Chatchat & ChatGLM
     一、模型&环境介绍#1.ChatGLM#github地址:https://github.com/THUDM模型地址:https://huggingface.co/THUDM2.m3e#模型地址:https://huggingface.co/moka-ai/m3e-base/3.text2vec#模型地址:https://huggingface.co/GanymedeNil/text2vec-large-chinese/4.Lang......
  • langchain Chatchat windows11 CPU部署记录
    1、下载langchainChatchatgitclonehttps://github.com/chatchat-space/Langchain-Chatchat.git(可选)如果下载不下来,可能使用了代理,需要设置代理地址:gitconfig--globalhttp.proxy"localhost:你的代理端口"之后可以取消代理设置:gitconfig--global--unsethttp.proxy2......