Minor GC、Major GC、Full GC 区别
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11488036.html
Minor GC 清理年轻代
Minor GC指新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC。因为新生代中大多数对象的生命周期都很短,所以发生Minor GC的频率很高,虽然它会触发stop-the-world,但是它的回收速度很快。
Major GC 清理老年代
Major GC清理Tenured区,用于回收老年代,出现Major GC通常会出现至少一次Minor GC。
Full GC 清理整个堆空间—包括年轻代、老年代、元空间
Full GC是针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC。Full GC不等于Major GC,也不等于Minor GC+Major GC,发生Full GC需要看使用了什么垃圾收集器组合,才能解释是什么样的垃圾回收。
Note
不管什么GC,都会发生stop-the-world,区别是发⽣的时间长短。⽽这个时间跟垃圾收集器又有关系,Serial、PartNew、Parallel Scavenge收集器⽆论是串⾏还是并⾏,都会挂起⽤户线程,⽽CMS和G1在并发标记时,是不会挂起⽤户线程的,但其它时候⼀样会挂起⽤户线程,STW 的时间相对来说就小很多了。
Major GC 在很多参考资料中是等价于 Full GC的,我们也可以发现很多性能监测工具中只有Minor GC 和 Full GC。
⼀般情况下,⼀次Full GC将会对年轻代、⽼年代、元空间以及堆外内存进⾏垃圾回收。
触发Full GC的原因有很多:
- 当年轻代晋升到⽼年代的对象⼤⼩,并⽐⽬前⽼年代剩余的空间⼤⼩还要⼤时,会触发Full GC;
- 当⽼年代的空间使⽤率超过某阈值时,会触发Full GC;
- 当元空间不⾜时(JDK1.7永久代不足),也会触发Full GC;
- 当调⽤System.gc()也会安排⼀次Full GC。
Reference
https://plumbr.io/blog/garbage-collection/minor-gc-vs-major-gc-vs-full-gc
https://time.geekbang.org/column/article/109201
Minor GC、Major GC、Full GC 区别的更多相关文章
- Minor GC&Full GC&Major GC区别及触发条件
Minor GC:从年轻代回收内存 触发条件 1.Eden区域满 2.新创建的对象大小 > Eden所剩空间 Full GC:清理整个堆空间,包括年轻代和老年代 触发条件 1.每次晋升到 ...
- jvm minor gc 为什么比 full gc 快很多
1.minor gc 也需要STW,只不过正常情况下 minor gc STW时间非常短,所以很多人误以为没有STW. 这里的正常情况是,Eden 区产生的新对象大部分被回收了,不需要拷贝. 2.M ...
- 4. GC 算法(实现篇) - GC参考手册
您应该已经阅读了前面的章节: 垃圾收集简介 - GC参考手册 Java中的垃圾收集 - GC参考手册 GC 算法(基础篇) - GC参考手册 学习了GC算法的相关概念之后, 我们将介绍在JVM中这些算 ...
- 【GC分析】Java GC日志查看
Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...
- golang(go语言)调试和查看gc信息,以及gc信息解析
这里记录一下调试golang gc的方法 启用gc打印: # GODEBUG=gctrace=1 go run ./main.go 程序启动后gc将打印如下信息: gc 65 @16.996s 0%: ...
- System.gc()与Object.finalize()的区别
finalize()是由JVM自动调用的,你可以用System.gc(),但JVM不一定会立刻执行,JVM感觉内存空间有限时,才会开始执行finalize(),至于新的对象创建个数和被收集个数不同是因 ...
- GC入门指南(二)------GC工作原理
本系列博客旨在帮助大家理解java垃圾收集器及其工作原理,这是系列的第二篇. java垃圾回收事实上是由一个能够进行自己主动内存管理的进程完毕的,这使得程序猿在写代码的时候不必过多考虑内存释放与回收的 ...
- GC垃圾回收之GC.KeepAlive方法
http://msdn.microsoft.com/zh-cn/library/system.gc.keepalive.aspx http://www.cnblogs.com/ren700622/ar ...
- copy GC 和 mark & compaction GC的算法异同
先标记 然后 copy GC是,对所有child,判断, 如果child没有被访问过,那么拷贝到新地址,child的forwording指向新地址,child标记为已访问,把自己对child的引用改为 ...
- 什么是新生代 GC 和老年代 GC
GC 经常发生的区域是堆区,堆区还可以细分为新生代.老年代 jvm堆示意图 新生代 一个 Eden 区 两个 Survivor 区 老年代 默认 新生代(Young)与老年代(Old)的比例的值为 1 ...
随机推荐
- 算法所产生的性能改进已经超过了硬件所带来的性能提升 The future is algorithms, not code
w 大数据的发展,伴随的将是软件工程师的渐退,算法工程师的崛起 http://mp.weixin.qq.com/s/XTz2HnzwlgTD3g5zU2u5Tg
- JDBC 查询mysql数据库比客户端工具慢的解决办法
在URL链接参数中配置rewriteBatchedStatements.useServerPrepStmts为true url="jdbc:mysql://****/dbName?useSS ...
- 红帽虚拟化RHEV-PXE批量安装RHEV-H
目录 目录 前言 软件环境 前提 部署 PXE 环境 使用 yum 安装所需软件 配置 DHCP 配置 TFTP-Server 配置 vsftpd 服务用于提供安装系统所需软件包 安装 kicksta ...
- Windows + Ubuntu 16.04 双系统安装详细教程(转)
转载自:http://www.cnblogs.com/Duane/p/6776302.html 前言:本篇文章是对之前文章的更新,更新的主内容是把原来用手机拍摄的图片换成了虚拟机的截图,以及对磁盘划分 ...
- [19/05/16-星期四] HTML_body标签(表格标签)
一.概念 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- [19/05/05-星期日] JDBC(Java DataBase Connectivity,java数据库连接)_mysql基本知识
一.概念 (1).是一种开放源代码的关系型数据库管理系统(RDBMS,Relational Database Management System):目前有很多大公司(新浪.京东.阿里)使用: (2). ...
- JAVA总结--代码规范
一.命名规范 1.标识符:统一.达意.简洁 统一:一个词有多种表达方式,不求最好,但求统一:例:供应商,既可以用supplier,也可以用provider,选择一种统一使用: 达意:明确表达其意义,正 ...
- String.indexOf()的使用方法
String.indexOf()的用途: 返回此字符串中第一个出现的指定的子字符串,如果没有找到则返回-1 源码如下: /** * Returns the index within this stri ...
- Eclipse解除已关联的Coding远程仓库,重新关联github上的远程仓库
1.在Eclipse中的Git Repositories中找到要解除的仓库,依次找到Remote--origin[视自己的实际情况选择], 2.选中origin,右键选择Delete Remote , ...
- 说说 HTTP 和 HTTPS 区别??
HTTP 协议传输的数据都是未加密的,也就是明文的,因此使用 HTTP 协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了 SSL(Secure Sockets Layer ...