4.JVM系列-垃圾收集器总结

目录

一、背景

二、垃圾收集器比较

三、常用JVM参数

四、垃圾收集器对比

五、关系图

一、背景

      前面的章节单独说了下CMS和G1,而更早的收集器如并没有被淘汰,当CMS和G1收集失败后会转为使用Serial Old收集器进行一次full gc,所以学习其他的收集器也是有必要的。   

二、垃圾收集器比较

垃圾收集器特点适合场景

Serial(新生代)单线程全程STW流量小、内存<4G、单核

Serial Old(老)同上同上

ParNew(新)Serial的多线程版本搭配CMS实现低停顿

ParallelScavenge(新)可设置最大gc停顿时间及gc时间比吞吐高(用户时间/用户+GC),适用于非交互式,如批处理应用

Parallel Old(老)同上同上

CMS(老年代)低停顿、易产生内存碎片想低停顿但可以容忍较多的fgc

G1(新+老)低停顿、不易产生内存碎片内存>=6G、停顿可控、不容忍频繁fgc

ZGC(新+老)STW不超过10毫秒

STW不会随堆大小而增加

堆范围几百M~几TB。

使用大中小内存低停顿为目标

G1的目标是淘汰CMS,ZGC的目标是淘汰G1

三、常用JVM参数

CMS和G1相关的参数在上2篇章节已说明,这里不再列。

参数意义优化建议默认值

-Xms2000m  设置堆初始2G同Xmx,避免动态调整,默认空余堆内存小于40%会调增大于70%会调小物理内存的1/64

-Xmx2000m设置堆最大2G同Xms物理内存的1/4

-Xss每个线程的栈大小无特殊不要超过默认值,否则会影响线程数1M

-XX:NewRatio=4 年轻代(eden+2s):老年代=1:4若已设置xmn,不需设此参数,另外选择G1和ZGC不建议设此参数2

-XX:SurvivorRatio=82s:eden=1:8G1和ZGC动态分配不建议设置此参数8

-XX:MaxGCPauseMillis=100允许的GC最大的暂停时间,过小GC就会频繁,过大暂停久太过频繁或者暂停久可通过此参数调整200ms

-XX:+TieredCompilation使用分层编译来提升启动速度默认打开true

-XX:CICompilerCount=N编译线程的数目无需要不必调整4

-XX:-UseBiasedLocking 禁用偏向锁在存在大量锁对象的创建并高度并发的环境下禁用偏向锁能够带来一定的性能优化打开

-XX:AutoBoxCacheMaxJDK默认只缓存 -128 ~ +127的Integer 和 Long,此参数更改次值对于频繁创建Integer对象的可使用此参数优化128

-XX:+AlwaysPreTouchJAVA进程启动的时候,虽然我们可以为JVM指定合适的内存大小,但是这些内存操作系统并没有真正的分配给JVM,而是等JVM访问这些内存的时候,才真正分配,这样会造成以下问题。

1、GC的时候,新生代的对象要晋升到老年代的时候,需要内存,这个时候操作系统才真正分配内存,这样就会加大young gc的停顿时间;

2、可能存在内存碎片的问题。

JVM就会先访问所有分配给它的内存,让操作系统把内存真正的分配给JVM.后续JVM就可以顺畅的访问内存了。

false

-XX:-OmitStackTraceInFastThrow抛出相同的异常N次之后,JVM会对某些特定异常如NPE进行优化,不再带异常栈。如日志里一条条Nul Point Exception不接收此操作,可以关闭true

-XX:+PrintGCApplicationStoppedTime除了打印清晰的完整的GC停顿时间外,还可以打印其他的JVM停顿时间打开false

-XX:+PrintPromotionFailure打开了就知道是多大的新生代对象晋升到老生代失败从而引发Fgc打开false

比较通用的配置方案:

JVM_ARGS="-server -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.io.tmpdir=/tmp -Djava.net.preferIPv6Addresses=false"

JVM_GC="-XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:InitiatingHeapOccupancyPercent=40 -XX:MaxGCPauseMillis=100  -XX:-UseBiasedLocking -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCDateStamps -XX:+PrintStringTableStatistics -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCApplicationStoppedTime -XX:+PrintFlagsFinal -XX:-UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:$LOG_PATH/gc.log -XX:ErrorFile=$LOG_PATH/vmerr.log  -Xss512k -Xmx"$jvmSize" -Xms"$jvmSize" -XX:MetaspaceSize="$MaxMetaspaceSize" -XX:MaxMetaspaceSize="$MaxMetaspaceSize" -XX:+AlwaysPreTouch -XX:ReservedCodeCacheSize="$ReservedCodeCacheSize" -XX:InitialCodeCacheSize="$InitialCodeCacheSize" -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_PATH"

其中

case Using G1 GC

case 1G: Xms=512m MaxMetaspaceSize=64m ReservedCodeCacheSize=32m InitialCodeCacheSize=32m

case2G:  Xms=1g MaxMetaspaceSize=128m ReservedCodeCacheSize=64m InitialCodeCacheSize=64m

case4G:  Xms=2g MaxMetaspaceSize=256m ReservedCodeCacheSize=64m InitialCodeCacheSize=64m

case8G:  Xms=4g MaxMetaspaceSize=256m ReservedCodeCacheSize=128m InitialCodeCacheSize=128m

case16G:Xms=12g MaxMetaspaceSize=512m ReservedCodeCacheSize=256m InitialCodeCacheSize=256m

case22~28G:  Xms=18g MaxMetaspaceSize=512m ReservedCodeCacheSize=256m InitialCodeCacheSize=256m

case32~44G:  Xms=24g MaxMetaspaceSize=1g ReservedCodeCacheSize=512m InitialCodeCacheSize=512m

case64~88G:  Xms=32g MaxMetaspaceSize=2g ReservedCodeCacheSize=1g InitialCodeCacheSize=1g

四、垃圾收集器对比

CMS和G1在上2章节已说明。

简介新/老基于算法

简介新/老基于算法

Serial单线程,全程STW新生代复制

ParNewSerial的多线程版本新生代复制

Parallel Scavenge可以通过调整参数,控制停顿时间或最大的吞吐量新生代复制

Serial Old单线程,CMS和G1失败采用此老年代标记整理

Parallel Old可以通过调整参数,控制停顿时间或最大的吞吐量老年代标记整理

五、关系图


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

推荐阅读更多精彩内容