从网络GC到垃圾分类

2019-07-29  本文已影响0人  寻叶亭

最近一段时间,垃圾分类很火,原因是人们发现扔垃圾这件小事,竟然没想象中那么简单。

以前不管什么垃圾,都是一股脑全扔在一起,现在倒好,要分什么干垃圾、湿垃圾、有害垃圾和可回收物,这都是什么鬼啊,为啥要搞那么复杂~

看到这里的同学,肯定会以为我接下来会讲,如何区分这些分类吧?NONONO!我要讲的是在计算机世界,如何进行垃圾回收(GC即Garbage Collection)。

咱们先来看一个段子吧,是说你到过的餐厅里边,其实都只能分为两种,一种是吃完需要自己端盘子的,另外一种就是吃完直接走人,由专门的服务员来收拾盘子的,这其实就是两种回收机制。在编程界,前一种机制的代表语言是C++,后一种则是Java。

今天我们主要聊的就是,Java是如何对内存进行垃圾回收的,咱们先看图

Java堆内存分布图

从图中可以得出,Java堆内存是分区进行管理的,主要分为2个区域-年轻代与老年代,其中年轻代又分 Eden 区和 Survivor 区,其中 Survivor 区又分 From 和 To 2个区。可能这时候大家会有疑问,为什么要分这么多区,搞那么复杂(这句好像似曾相识)~

不要急,我们慢慢来看,年轻代从字面意义上来讲,主要存放一些新建(刚出生)不久的对象,老年代则存放的是,生命周期比较长的对象,中间的Surivor区是二者的过渡区,也可以理解为加一层保险,以防漏网之鱼。

为什么要分区,其实这是经过了多年摸索,才演化为今天这个分区治理的机制,之前所有对象大一统的方法,不管怎样总是有这样和那样的缺陷,现在是分区采用最适合的方法。

每个区的处理机制不一样,比如年轻代垃圾回收会更频繁,老年代则很久才会做一次回收,根据对象的不同生命周期分而治之,就像韦小宝一样,见人说人话,见鬼说鬼话,最后黑白两道通吃,到哪都有兄弟,还抱得众美人归。

毫不夸张的说,正是由于采用了合理的垃圾回收机制,计算机程序才能做到,长时间的不宕机稳定运行,也才能有如今如火如荼的互联网产业。

别的不谈,单从计算机垃圾回收目前的机制来看,咱们在现实生活中实施垃圾分类,长远来看是正确的做法,因为只有分类了,才能使用它最适合的处理方式。

唉,IT做久了,啥事都习惯性从计算机的角度来思考,也算一种职业病吧。

上一篇下一篇

猜你喜欢

热点阅读