GC(5)、Serial、ParNew、Parallel Scavenge、Serial Old和Parallel Old收集器

一、首先需要引入几个概念
1、Stop-The-World
(1.1)概念:
java中一种全局暂停的现象。
全局暂停------所有java代码停止(但是native代码是可以执行的,但不能和JVM交互)。
大多数都是由于GC引起的。

(1.2)为什么GC会出现Stop-The-World(全局暂停)?
这样想或许能理解:你妈在打扫房间,但是你一直吃瓜子往地上吐皮,这时候又有新的垃圾产生,房间永远打扫不干净,只有让你停止嗑瓜子,才能打扫干净。GC也是一个道理。

(1.3)危害:
长时间服务停止,未响应。客户早就跑了。

2、安全点(Safepoint)
(2.1)概念:
再“特定的位置”记录了信息,这些位置称为安全点。即程序执行时并非在所有地方都能停顿下来开始GC,只有到达安全点才会暂停。

(2.2)什么情况会产生上述的“特定的位置”?
以“是否具有让程序长时间执行的特征”为标准来选取。最明显的特征就是指令序列服用,例如方法调用,循环跳转和异常跳转等这些才会可能产生安全点。

(2.3)如何让GC发生时,让所有线程(不包含JNI调用的)都跑到最近的安全点上停顿下来?
两种方案:
抢先式中断(Preemptive Suspension):在GC发生时,首先把所有线程全中断,若发现有线程中断的地方不在安全点上,就恢复线程,让他跑到安全点上。(此方式几乎没有虚拟机还在采用)

主动式中断(Voluntary Suspension):当GC需要中断线程的时候,不直接对线程操作,仅仅简单的设置一个标志,各个线程执行时主动去轮询这个标志,发现中断标志为真时就自己中断挂起轮询标志的地方和安全点是重合的,另外再加上创建对象需要分配内存的地方。

3、安全区域(Safe Region)
(3.1)若程序不执行,那怎么达到安全点?
比如线程处于Sleep或者Blocked状态,这时候线程无法响应JVM的中断请求,“走”到安全的地方去中断挂起。那怎么办?这时候需要靠安全区域来解决。

(3.2)在线程执行到Safe Region中的代码时,首先标志自己已经进入了Safe Region,那么,当在这段时间里JVM要发起GC时候,就不管标志自己为Safe Region状态的线程了,在线程要离开Safe Region时,他要检查系统是否已经完成了根节点枚举(或者是整个GC过程),如果完成了,那线程就继续执行,否则他就必须等待直到收到可以安全离开Safe Region的信号为止。

4、串行
(4.1)优点:
最古老、最稳定,效率高

(4.1)缺点:
可能会产生较长的停顿(Stop-The-World)

5、并行和并发
这两个概念容易混淆。
并行是你在某一时刻不仅在扫地同时还在打电话。同一时刻干了多件事。
并发是在某一时刻某件事被干了多次,产生了高并发。

二、Serial收集器(串行)
是一个单线程的收集器,他在工作时,必须暂停其他所有的工作线程(Stop-The-World),直到他收集结束。这是难以忍受的,但是他的效率较高。

Paste_Image.png

三、ParNew收集器(并行)
是Serial收集器的多线程版本。

Paste_Image.png

四、Parallel Scavenge收集器(并行)
是一个新生代收集器,他也是使用复制算法。他的目标规则是达到一个可控制的吞吐量。
吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间),虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那么吞吐量就是99%。

五、Serial Old收集器
Serial Old是Serial收集器的老年代版本,他同样是一个单线程收集器,使用标记-整理算法。

Paste_Image.png

六、Parallel Old收集器
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法。

Paste_Image.png

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


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

推荐阅读更多精彩内容