JVM GC知识(二)- HotSpot 垃圾回收器

Sun HotSpot垃圾回收器

概览

新生代和老年代用到的一些垃圾回收器

永久代

当永久代和老年代触发 GC 时,除CMS均会触发 Full GC

首先按照新生代配置的GC方式进行 Minor GC;

再按照老年代配置的GC方式对老年代和永久代进行GC;

若 JVM 估计 Minor GC后可能会发生晋升失败,则直接采用老年代配置的GC方式对新生代,老年代进行GC

一些术语

串行 ( Serial ) vs 并行 ( Parallel )

在单核CPU上并行可能更慢

STW ( Stop-the-world ) vs 并发 ( Concurrent )

STW : 暂停整个应用,时间可能会很长;

并发 ( Concurrent ) : 更加复杂,GC可能会抢占应用的CPU;

新生代可用GC

均使用复制算法,原理上是一致的:

拷贝 eden 和 from 中的存活对象到 to 中;

部分对象由于某些原因晋升到 old 中;

清空 eden, from, from 和 to 交换身份直到下一次GC发生

分配对象时,eden 空间不足时触发

Serial Copying

特性

Serial, Stop-the-world

适用场景

单CPU, 新生代小, 对暂停时间要求不高的应用;

是 client 级别或32位Windows上的默认选项

对象分配在老年代的情况

对象超过 eden space 的大小

大对象

晋升规则

经历多次 minor gc 仍存活的对象

to survivor 放不下的(满或剩余空间不够)对象直接晋升

Parallel Scavenge

特性

Parallel、 Stop-the-world

并行线程数默认值:

CPU核数 <= 8:=CPU核数

CPU核数 > 8 := (3 + CPU核数 * 5)/8,

亦可强制指定线程数 (-XX:ParallelGCThreads=4)

会根据 minor GC 的频率、时间等动态调整 eden/s0/s1 的大小,可取消这一特性

-XX:-UseAdaptiveSizePolicy

适用场景

多CPU、对暂停时间要求较短的应用

是server级别(2核CPU 2G内存)机器上的默认选择

对象分配在老年代的情况

在 TLAB 和 eden 上分配失败,且对象大于eden的一半大小

PretenureSizeThreshold参数是无效的

晋升规则

经历多次minor GC仍存活的对象(规则和参数都比Serial Copying复杂);

to survivor放不下的(满或剩余空间不够)对象直接晋升

ParNew

特性

Parallel、Stop-the-world

可以认为是Serial Copying的多线程版本,各项特征与之基本一致

可以搭配CMS

不可搭配Parallel Old

老年代可用GC

Serial MSC

特性

Serial、Stop-the-world

使用算法:Mark-Sweep-Compact

由于是单线程,GC造成的暂停时间可能会很长,可使用-XX:+PrintGCApplicationStoppedTime查看暂停时间

适用场景

是client级别或32位Windows上的默认选择

Parallel Compacting

特性

Parallel、Stop-the-world

使用算法:Mark-Compact

适用场景

多核CPU、对暂停时间较敏感的应用

是server级别(2核CPU 2G内存)机器上的默认选择

Concurrent Mark-Sweep(CMS)

特性

Parallel、Concurrent

使用算法:Mark-Sweep

缩短GC暂停时间,但相当复杂,增加了GC总时间

默认并发线程数=(新生代并行GC线程数 + 3)/4,也可用-XX:ParallelCMSThreads=2来指定

对Perm Generation也可启用CMS:-XX:+CMSPermGenSweepingEnabled,-XX:+CMSClassUnloadingEnabled

适用场景

暂停时间短,对追求最快响应速度的应用,尤其是互联网应用很适用

组合

支持的组合

两个标准

吞吐量=应用运行时间/总时间

关注GC总耗时

暂停时间

关注每次GC造成的应用暂停

组合的选择

单CPU或小内存,单机程序(-XX:+UseSerialGC)

多CPU,需要最大吞吐量,如后台计算型应用(-XX:+UseParallelGC或者-XX:+UseParallelOldGC)

多CPU,追求低停顿时间,需快速响应如互联网应用(-XX:+UseConcMarkSweepGC -XX:+ParNewGC)

自动选择GC方式

吞吐量优先

-XX:GCTimeRatio=n

暂停时间优先

-XX:MaxGCPauseMillis=n

一般不使用

触发GC-young GC

eden 区的内存不够时,就会触发young GC

对象分配内存

为TLAB分配内存

Ps:young GC中有部分存活对象会晋升到old gen,所以young GC后old gen的占用量通常会有所升高

触发GC-full GC

old gen 空间不足

统计得到 young GC 晋升到 old gen的对象总和大于old gen 剩余空间

young GC出现 promotion failure

执行 System.gc()、jmap -histo:live

perm gen 空间不足


By the way

有问题?可以给我留言或私聊

有收获?那就顺手点个赞呗~

当然,也可以到我的公众号下「6曦轩」,

回复“学习”,即可收到一份【Java工程师进阶架构师的视频教程】~

回复“面试”,可以收到一套【本人呕心沥血整理的Java面试题目】(部分目录如下)



由于我咧,科班出身的程序员,php,Android以及硬件方面都做过,不过最后还是选择专注于做 Java,所以有啥问题可以到公众号提问讨论(技术情感倾诉都可以哈哈哈),看到的话会尽快回复,希望可以跟大家共同学习进步,关于服务端架构,Java 核心知识解析,职业生涯,面试总结等文章会不定期坚持推送输出,欢迎大家关注~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容