Full GC和Minor GC是什么
Full GC和Minor GC是什么
这篇文章主要介绍了Full GC和Minor GC是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Full GC和Minor GC是什么文章都会有所收获,下面我们一起来看看吧。
大家可能见到过很多的 GC 名词,比如:Minor GC、Young GC、Full GC、Old GC、Major GC、Mixed GC。
这么多概念,想想都头疼,到底各种乱七八糟的 GC 指的是什么?
下面先引用 R 大在知乎上的回答:
针对 HotSpot VM 的实现,它里面的 GC 其实准确分类有两种:
Partial GC(局部 GC): 并不收集整个 GC 堆的模式 Young GC: 只收集 Young Gen 的 GC,Young GC 还有种说法就叫做 Minor GC Old GC: 只收集 old gen 的 GC,只有垃圾收集器 CMS 的 concurrent collection 是这个模式 Mixed GC: 收集整个 Young Gen 以及部分 old gen 的 GC,只有垃圾收集器 G1 有这个模式 Full GC: 收集整个堆,包括新生代,老年代,永久代(在 JDK 1.8 及以后,永久代被移除,换为 metaspace 元空间)等所有部分的模式
接下来让我们再来了解下各个 GC:
(1)Minor GC / Young GC
首先我们先来看下 Minor GC / Young GC,大家都知道,新生代(Young Gen)也可以称之为年轻代,这两个名词是等价的。那么在年轻代中的 Eden 内存区域被占满之后,实际上就需要触发年轻代的 GC,或者是新生代的 GC。
此时这个新生代 GC,其实就是所谓的 Minor GC,也可以称之为 Young GC,这两个名词,相信大家就理解了,说白了,就专门针对新生代的 GC。
(2)Old GC
所谓的老年代 GC,称之为 Old GC 更加合适一些,因为从字面意义上就可以理解,这就是所谓的老年代 GC。
但是在这里之所以我们把老年代 GC 称之为Full GC,其实也是可以的,只不过是一个字面意思的多种不同的说法。
为了更加精准的表述这个老年代 GC 的含义,可以把老年代 GC 称之为 Old GC。
(3)Full GC
对于 Full GC,其实这里有一个更加合适的说法,就是说 Full GC 指的是针对新生代、老年代、永久代的全体内存空间的垃圾回收,所以称之为 Full GC。
从字面意思上也可以理解,Full 就是整体的意思,所以就是对 JVM 进行一次整体的垃圾回收,把各个内存区域的垃圾都回收掉。
(4)Major GC
还有一个名词是所谓的 Major GC,这个其实一般用的比较少,他也是一个非常容易混淆的概念。
有些人把 Major GC 跟 Old GC等价起来,认为他就是针对老年代的 GC,也有人把 Major GC 和 Full GC 等价起来,认为他是针对 JVM 全体内存区域的GC。
所以针对这个容易混淆的概念,建议大家以后少提。如果听到有人说这个 Major GC的概念,大家可以问清楚,他到底是想说 Old GC 呢?还是 Full GC 呢?
(5)Mixed GC
Mixed GC 是 G1 中特有的概念,其实说白了,主要就是说在 G1 中,一旦老年代占据堆内存的 45%(-XX:InitiatingHeapOccupancyPercent:设置触发标记周期的 Java 堆占用率阈值,默认值是 45%。这里的Java 堆占比指的是 non_young_capacity_bytes,包括 old + humongous),就要触发 Mixed GC,此时对年轻代和老年代都会进行回收。Mixed GC 只有 G1 中才会出现。
关于“Full GC和Minor GC是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Full GC和Minor GC是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。
推荐阅读
-
4个理由告诉你Java为何排行第一
本文由码农网 –单劼原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!Java已经有20年的历史了,甚...
-
写给精明Java开发者的测试技巧
我们都会为我们的代码编写测试,不是吗?毫无疑问,我知道这个问题的答案可能会从“当然,但你知道怎样才能避免写测试吗?”到“必须...
-
Java 微服务框架 Redkale 入门介绍
Redkale功能Redkale虽然只有1.xM大小,但是麻雀虽小五脏俱全。既可作为服务器使用,也可当工具包使用。作为独立的工...
-
Java内存管理原理及内存区域详解
一、概述Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁...
-
2015年Java开发岗位面试题归类
下面是我自己收集整理的Java岗位今天面经遇到的面试题,可以用它来好好准备面试。一、Java基础1.String...
-
Java 虚拟机类加载机制和字节码执行引擎
引言我们知道java代码编译后生成的是字节码,那虚拟机是如何加载这些class字节码文件的呢?加载之后又是如何进行方法调用的呢?...
-
Java常量池理解与总结
一.相关概念什么是常量用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态...
-
Java 实现线程死锁
概述春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是Sync...
-
Java:过去、未来的互联网编程之王
Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java...
-
20个高级Java面试题汇总
本文由码农网 –小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!这是一个高级Java面试系列题中...
