Java核心技术讲解学习五

昨天我们简单的了解安全点和安全区域了解HotSpot虚拟机是怎么快速的完成GC的,这次我们才了解下期中使用的垃圾回收器都有什么。
垃圾回收器是JVM虚拟机进行垃圾回收的主要力量,那么在现在的发展过程中有多少垃圾回收期类型,并且以后垃圾回收器的发展又是什么呢?

垃圾回收器

垃圾回收器从JVM虚拟机出来在Java中现在已经发展了好几代,大体形成了7种类型的虚拟机。有Serial收集器,ParNew,ParallelScavenge ,CMS , Serial Old , Parallel Old ,还有最新的G1收集器。

Serial 收集器

这个收集器在Java历史中是时间最长久的收集器,该收集器是一个单线程的收集器,并且收集器在收集的过程中会暂停其他线程的工作,直到该收集工作完成后才会进行工作。Serial收集工作流程如下:


处理流程

Serial Old 收集器

Serial Old 收集器是Serial 收集器的老年代的版本,我们上面在介绍Serial 时简单说过它内部的算法。标记-整理算法


处理流程

ParNew 收集器

该收集器可以看成Serial线程 的多线程版本。该收集器在与后面要写到的收集器CMS进行配合工作,也只有该收集器能与CMS收集配合。并且收集器提高了Serial收集器时代的效率问题。属于第一款并行收集器。
为了方便下面的介绍这里简单的介绍下并行与并发。

  • 并行: 在同一个时刻多条线程并行工作,工作线程继续等待。也就是暂停。所有线程交给垃圾处理器使用。
  • 并发:指的的工作线程与垃圾处理器线程同时执行。


    image.png

Parallel Scavenge 收集器

该收集器属于新生代收集器跟上面两个收集器在新生代使用的算法一样 都是复制。这个收集器与其他手机器不同的方向是,他的目的是用来控制吞吐量,而其他的收集器目的是尽可能的减少程序的停顿时间。我们在使用这个收集器的时候可以配置-XX:MaxGCPauseMillis 控制垃圾回收的停顿时间,-XX:GCTimeRatio控制吞吐量。

  • -XX:GCTimeRatio 是一个比例时间控制 大于0 小于100的值, 如果该参数设置成5 那么垃圾回收的时间就是总程序时间的5/100 ;时间过少容易造成GC比较频繁,这样也容易降低吞吐量。设置时间长点,GC就不会太频繁。并且吞吐量提高了。这个时间设置需要平衡。

Parallel Old 收集器

Parallel Old 收集器是Parallel Scavenge 收集器的老年版本 使用的是多线程与 标记-整理算法。该线程与Parallel Scavenge 进行配合在注重吞吐量和CPU资源敏感的场合,该组合都可以优先考虑。


收集器

CMS收集器

CMS收集器 是一种 以获取最短回收停顿时间为目标的收集器。CMS使用的算法是标记-清除算法。整个运行流程为

  • 初始标记 :执行过程汇总会暂停工作线程。 该过程中只标记GC Root能关联到的对象
  • 并发标记 :执行过程中可与工作线程一块进行 。该过程进行 GC RootsTracing 过程
  • 重新标记 : 执行过程中会暂停工作线程。 并且修改并发标记期间改变的对象的标记记录
  • 并发清除 :执行过程中可与工作线程一块进行 。该过程 清除带有标记的对象。
    CMS收集器优点在于并发,低停顿,但是该收集器还有他的缺点:
  1. 对CPU资源敏感 。 虽然可以与应用程序一块执行,但是总会占用CPU资源,如果程序是CPU敏感性程序,那么CMS收集器就会造成程勋运行慢的情况。
  2. CMS收集器无法处理浮动垃圾,这种情况容易造成 Full GC。在垃圾回收的过程中 还会有新的垃圾不断产生,所以只能留到下次执行的时候才能去处理。
  3. 算法是标记-清除算法,该算法我们前面 介绍过,无法处理碎片空间,如果碎片空间过多,大对象无法创建,就会引发Full gc j进行清理。

G1 收集器

G1收集器 应该来说是现在最好的收集器,但是在程序执行过程中我们应该具体情况具体分析。G1都有什么特点呢?

  1. 并行与并发:G1能充分利用多核CPU的环境,可以使用并行来缩短Stop-The-Word 停顿的时间,但是并不停顿java线程,能让程序继续执行。
  2. 分代收集:G1收集器不用其他收集器配合就能管理GC堆。采用不同的方式去处理创建的对象和已经存活好好几代的就对象。
  3. 空间整合: 整体看属于标记-整理算法,但是在每个区域内还形成了复制算法。这样能不产生碎内存,分配大对象时能得到充足的空间不会导致新的一次GC.
  4. 可预测的停顿: 建立可预测的停顿时间模型。让使用者明确指定在一个长度为M毫秒内的时间段内,小号在垃圾收集上的时间不超过N毫秒。该模型避免了在Java整个堆内进行全区域的垃圾收集。G1会维护一个优先列表。用来跟踪Region里面的堆的价值大小。
  5. 在避免Gc进行全盘扫描的对象的情况下,G1在每个Region中是用Remembered Set 来维护 。虚拟机在对对象进行写操作时,会产生一个终端操作。检查Reference引用的对象是佛UC呼吁不同的Region中,如果是便通过CardTable 把相关引用记录到被引用对象所属的Region的Remembered Set 中。

G1收集器在收集的过程中,一般会进行以下几个步骤。

  1. 初识标记 :只是标记GC root 能关联到的对象。会停顿,但是耗时十分短。
  2. 并发标记: 对对象进行可达性分析。找出存活对象 ,可以与用户线程并发执行。耗时长点
  3. 最终标记: 修正在并发标记期间导致变动的标记记录。将记录记录在 Remembered Set Logs中。将Remembered Set Logs 合并到Remembered Set 中 。需要停顿,但是可以并行执行。
  4. 筛选回收: 对Region中的数据进行回收。


    G1收集流程

垃圾收集器参数总结

垃圾参数设置有很多,并且设置上也有很多的不同这个就不全部说了。最近知道一个阿里的大佬出来创业就是做的相关的jvm参数调优。可以去这里看看 学习学习参数调优

参数参考深入Java虚拟机参数

参数参考深入Java虚拟机参数

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

推荐阅读更多精彩内容