GC垃圾回收器

1、什么是垃圾

一个对象没有任何引用指向他

多个对象循环引用但是没有其他的引用指向他们

2、如何定位垃圾

reference count(引用计数):一个对象会记录有多少个引用指向了它,当指向它的引用数为0就是垃圾,不能定位循环依赖的情况

         3个引用指向这个对象不是垃圾

          没有引用时是垃圾

root searching(根可达算法):通过根对象依次找到依赖的对象,剩下的都是垃圾

           什么是根对象:线程栈变量、静态变量、常量池、JNI指针、Class(main方法中可以直接使用的对象)

3、垃圾回收算法

Mark-Sweep(标记清除)

     找到是垃圾的部分然后清除,位置不连续会产生碎片

Copying(拷贝)

       把内存分为两块,只是用其中一块,把存活的对象依次拷贝到另外一块内存中,再分配内存只使用这块内存,然后把剩下是垃圾的内存全部清除,下次再回收时往另外一块拷贝,垃圾回收时存活的对象在两块内存中来回拷贝。

    优点:不会产生碎片,效率很高

    缺点:浪费空间

Mark-Compact(标记压缩)

      把标记为存活的对象拷贝到标记为可回收或未使用的地方,在做标记和清除的过程中同时做了一次压缩

    好处:是把存活的对象放一块,未使用的内存连续,不会产生碎片,之后再分配大内存是方便

    缺点:效率比拷贝算法略低(内存的挪动带来线程同步)


4、JVM内存分代模型

    部分垃圾回收器使用的模型

    new-young(新生代):存活对象少,使用Coyp算法,效率高

    old(老年代):垃圾少,一般使用Mark-Compact(标记压缩),G1使用copy

    new-young(新生代):old(老年代) = 1:2

    新生代 : eden(伊甸)+ 2个suvivor区 比例是 8:1:1

    1、YGC(MinorGC)之后大多数的对象会被回收,活着的对象使用拷贝算法放入S0

    2、再次YGC,eden区+S0区活着的对象放入S1

    3、再次YGC,eden区+S1区活着的对象进入S0

    4、经历一次YGC年龄加1 ,达到一定年龄(Parallel Scavenge 15,CMS 6,G1 15)进入老年代,通过参数:-XX:MaxTenuringThreshold配置

    5、S区装不下直接放到老年代

    老年代:

    1、存放的是顽固分子

    老年代满了触发FullGC/FGC/MajorGC

GC调优的目标是:尽量减少FGC


5、对象从创建到销毁经历的过程


6、常见垃圾回收器

    1、Seral: 作用在新生代 串行回收

          当触发GC时所有的工作线程都暂停(STW),GC线程(单线程)开始工作,GC线程完成所有的工作线程才开始工作

    2、Parallel Scavenge: 作用在新生代 并行回收

          当触发GC是所有的工作新城都暂停(STW),GC线程(多线程)开始工作,GC线程完成所有的工作线程才开始工作

    3、ParNew: 作用在新生代 串行回收

          类似于Parallel Scavenge与CMS配合使用的

    4、SeralOld: 作用在老年代 串行回收

          类似于Seral,就是把Seral的算法作用在老年代

    5、ParallelOld: 作用在老年代 并行回收

          类似于Parallel,就是把Parallel的算法作用在老年代

    6、CMS: ConcurrentMarkSweep 作用在老年代 并发的 垃圾回去线程和应用线程同时运行 降低STW时间。既然是MarkSweep,就一定会有碎片化的问题,碎片到达一定程度,CMS的老年代分配对象分配不下的时候,使用SerialOld 进行老年代回收,消耗时间长

    7、G1: 三色标记 + SATB

    8、ZGC: ColoredPointers + LoadBarrier

    9、Shenandoah:ColoredPointers + WriteBarrier

    10、Eplison: debug调试虚拟机用

1.8默认的垃圾回收器组合是PS+PO                      1.9默认是G1

7、JVM参数分类

    1、标准参数:-开头 所有的HotSpot都支持

    2、非标准参数:-X开头,特定版本的HotSpot支持特定的命令

    3、不稳定参数:-XX开头

8、常见垃圾回收器组合参数设定:(1.8)

    -XX:+UseSerialGC = Serial New (DefNew) + Serial Old小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器

    -XX:+UseParNewGC = ParNew + SerialOld这个组合已经很少用(在某些版本中已经废弃)

    -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old

    -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】

    -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old

    -XX:+UseG1GC = G1

    启动java程序时配置参数示例

    java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC HelloGC(ClassName) PrintGCDetails PrintGCTimeStamps PrintGCCauses

    java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC(ClassName)

    设定日志参数示例参考,共产生5个GC日志文件,每个文件最大20M,滚动使用这5个文件

    -Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause

9、GC日志详解

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

推荐阅读更多精彩内容