使用白话文,实例化举例来讲一讲,垃圾回收模型,到底是什么意思,什么叫串行、什么叫并行、什么又叫并发呢?

使用白话文,实例化举例来讲一讲,垃圾回收模型,到底是什么意思,什么叫串行、什么叫并行、什么又叫并发呢?

其实我们可以用生活中的常见的例子进行举例说明,那就特别好理解了。

大家一定下过馆子,那么举个例子1:

 

1.串行回收算法

假设一个人去一个面馆吃面条,进入了一家面馆,然后进去了。点了一碗面,吃着,然后吃完就走了。那碗面汤还在桌上,没动。接着又一个人又进来吃面了,选了一个干净,没有面汤的桌子坐下了,也吃了一碗面走了。然后剩下的面汤也还在桌上,没动。假设这个面馆一共就6个位置,那么老板想着,只有面馆桌子凑满5个桌子没收拾,就立马去收拾。然后可想而知,假设已经有5个人吃完面条了,然后老板做了一个事情:直接关门,先暂停营业,老板一个人收拾桌子,收拾好啦,再开业!那么这个时候,还有一个地方注意,当第5碗面条出售出去了,不代表,5个人全吃完了。老板只是凑到5个人用了5张桌子,要开始整理整理桌子,但是老板忽略了,可能有人还在吃面条,但是老板不管,直接暂停所有动作,吃面条的,先别吃,待着,我等会整理的时候不动你的碗就是了。

那么这个例子大家应该好理解了:对于一家小面馆来说,只有老板一个人在做事的话,是不是这种方式到有点道理。那么我们把这个和垃圾回收算法进行绑定联系:可以理解为,这就是串行收集垃圾。一个人进来就是一个用户线程,吃完了面,留下了一堆垃圾;那么老板关门进行收拾整理,可以理解为这就是 STW(stop the world),停止所有的用户线程,我先收集垃圾。作为用户体验来说,是有那么点点不好哈,你想,我吃着面条,老板突然说要收拾桌子,但是虽然不会把我还在吃的面条收走,但是你叫我停下来,让你检查,这也太悲催了吧。那么老板收拾完后,又让我们继续吃面,然后又有人进来,这样导致也会有很多问题,比如,老板收拾了之后,不会叫顾客挪一下地把,只是把那些已经吃完了桌子进行整理,所以会导致一个小问题:假如一下进来了三个人,是一伙的。然后面馆里面虽然有三个位置,但是都是分散开的。对于这三个人来说,肯定是不答应的,这怎么坐,怎么占位置,所以这也是内存碎片的原因。并且一个问题,老板再怎么动作快,收拾桌子,那如果生意火爆,你这样的做法简直就是丢弃顾客啊。

 

2.并行回收算法:

上面例子说到,老板如果动作慢,对于生意火爆来说,还是有点供不应求,所有老板想到了一个解决方案:再招人,一起来说收拾;于是老板又招了两个人,还是一样的方法,当发现面馆有5个桌子上有面的时候,就慌了,赶紧关店,不多说,叫上其他2个人一起收拾,所有还在吃的,你先别吃,我先看看有哪些是没有人吃的,全收拾了。但是最后结果发现,虽然速度快了,但是还是会丢到好多顾客。体验很差。这就是并行回收算法的原理,本质来说,方案和串行回收算法是一致的,只不过说,是多个人进行收拾整理。还是让人家暂停了吃面。

 

3.并发回收算法 cms

在后来,老板想了很久,发现还不如,不关店,让那两个新来的,去收拾,就不暂停顾客吃面条了,让两个伙计在前台看着,如果出现有5个碗的时候,就去巡查一下,看看有哪些是没有人吃了的,就赶紧收拾了。这样下来,好像就合理了。其实这也是我们生活中的例子,服务员是始终有一个人在顾客吃饭的地方看着,如果有人走了。那么就去GC一下。让下一个人进来吃饭。

但是在第一个算法中有一个问题还是没有解决,那就是碎片问题。

 

4.G1回收算法

通过块状结构去解决,将小店分成若干个小块,然后呢,让每个服务员都负责某一快的收拾工作,然后还带有一个复制整理动作,就是当有一个地方一些顾客吃了好久,还在,然后就叫他们挪一下位置,挪到一堆的地方去,这样就形成了拷贝算法,解决了内存碎片问题。

 

5.那么上面中的 并发回收算法,其实也有本身上的漏洞,那怎么解决呢?我们举例说明

假设老板收拾桌子,刚好收拾完的时候,准备回去做面条了。结果又有一个人刚刚吃完就走了。那么这种现象在生活中其实很常见的。那怎么解决呢?其实不用刻意去解决,就是等老板下一次收拾的时候,再收拾就是了。问题不大。

 

6.但是会也有一个问题,假设一个顾客吃着吃着去上厕所了,然后老板发现满了5个人的时候,那怎么办呢?就会去收拾了,但是又不能把人家的碗收拾了。因为如果人家回来的时候,发现碗没了。咋办???这就涉及到一个引用问题了。下一篇文章,我们分析分析

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值