别写Bug了!赶紧把今天的垃圾给我分类了!

博客先介绍上海等地的垃圾分类情况及影响,接着引入程序世界的垃圾回收话题,介绍了GC标记 - 清除算法、GC标记 - 压缩算法、GC复制算法、RC Immix算法等垃圾回收算法,还推荐了《垃圾回收的算法与实现》《G1 GC的算法和实现》两本书。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7月1日,上海正式施行,

史上最严格垃圾分类条例——

《上海市生活垃圾管理条例》。

对于垃圾混放,

拒不整改者,

将面临个人最高 200 元罚款。

企业则是 5 万元。

有没有发现最近你老板的眉头越发紧锁了。

640?wx_fmt=jpeg

“侬是什么垃圾?”

这个夏天没人能逃得过的灵魂拷问。

除此之外还有灵魂六问。

每一问都深深刺痛着我们的心。

640?wx_fmt=png

在这场全民垃圾分类面前,

无论你的知识水平如何,

在监考官那里你都没有任何优势。

垃圾桶前踌躇的你,

永远都是那个考试前夜,

无法命中考题的小明。

640?wx_fmt=gif

这同样也是一场全民家庭和睦计划。

想象一下你老婆、你妈、你丈母娘,

同坐在一张桌子上,

研究胶水到底是什么垃圾,

小龙虾究竟要怎么分才最好。

多么和睦的画面。

640?wx_fmt=gif

就算这样,

还是被分类搞得头都大了。

那么,请试试这个,

史上最好理解的版本。

640?wx_fmt=jpeg

其实,如果每个食品、

物品上标注好垃圾的种类,

那我们分类起来是不是就会容易得多。

这不,某公司就派了一个老哥,

前去上海查看和推广垃圾分类情况,

结果就被大妈喷辽......

640?wx_fmt=jpeg

是是是!

革命尚未成功,

我们还需努力。

在志愿者的“灵魂拷问”下,

魔都人民的生活习惯也在改变。

据外卖数据平台显示,

7.1-7.4“无需餐具”的订单量,

同期环比增长 149%。

喜爱珍珠奶茶的毛女士,

在每次喝完奶茶后都会细细地将其分类。

(看来奶茶市场也要重新洗牌)

640?wx_fmt=png

如此有利于后代的事情,

又怎能让魔都独享。

目前帝都也即将开启垃圾分类模式。

与魔都不同,

帝都的垃圾分为

厨余垃圾、有害垃圾、

可回收垃圾以及其他垃圾。

640?wx_fmt=gif

除此之外,还可以实现刷脸开盖。

另外,全国多个城市,

也要开始运行垃圾分类了。

分类方法各有不同,

下次去旅行之前呢,

首先要做的不是攻略,

而是垃圾要如何正确分类。

不然真真儿会囊中羞涩。

640?wx_fmt=jpeg

与此同时,

因为垃圾分类的普及,

也衍生出了很多新职业。

打开新闻首页,

总是会看到诸如:

“代收垃圾月入过万”

“垃圾处理器安装工人,

月入过万,供不应求”

哎,啥都不说了,

头上的秀发又白了一撮。

看来等我儿子出生,

已经不是,

“3 岁开始学 Python 晚不晚”了。

而是,“垃圾分类如何早教?”

640?wx_fmt=jpeg

对垃圾分类的吐槽和调侃一直没有停止过。

人们争议最多的东西,

也证明了它存在的价值。

虽然一时间很痛苦,

但垃圾分类是利国利民的好事。

不仅可以变废为宝,

还可以节约土地,减少污染。

那何乐而不为呢?

640?wx_fmt=gif

在现实世界,

我们分类了这些生活垃圾。

程序世界里,

不用的内存空间,

我们要怎么回收呢?

当然......当然是使用 GC 了。

如今,多数编程语言都搭载有 GC。

对编程语言来说,

GC 就是一个无名英雄,

拼命地将垃圾回收再利用。

是时候安利你几个好用的垃圾回收算法了。

640?wx_fmt=png

世界上首个值得纪念的 GC 算法是——GC 标记 - 清除算法(Mark Sweep GC)。

自其问世以来,一直到半个世纪后的今天,它依然是各种处理程序所用的伟大的算法。

就如它的字面意思一样,GC 标记 - 清除算法由标记阶段和清除阶段构成。标记阶段是把所有活动对象都做上标记的阶段。

清除阶段是把那些没有标记的对象,也就是非活动对象回收的阶段。通过这两个阶段,就可以令不能利用的内存空间重新得到利用。

640?wx_fmt=png

GC 标记 - 压缩算法(Mark Compact GC)是将 GC 标记 - 清除算法与 GC 复制算法相结合的产物,由标记阶段和压缩阶段构成。

标记阶段和 GC 标记 - 清除算法时提到的标记阶段完全一样。压缩阶段则通过数次搜索堆来重新装填活动对象。不过它跟 GC 复制算法不同,不用牺牲半个堆。


640?wx_fmt=png

GC 复制算法(Copying GC)是 Marvin L. Minsky 在 1963 年研究出来的算法。说得简单点,就是只把某个空间里的活动对象复制到其他空间,把原空间里的所有对象都回收掉。这是一个相当大胆的算法。

我们将复制活动对象的原空间称为 From 空间,将粘贴活动对象的新空间称为 To 空间。当 From 空间被完全占满时,GC 会将活动对象全部复制到 To 空间。当复制完成后,该算法会把 From 空间和 To 空间互换,GC 也就结束了。From 空间和 To 空间大小必须一致。这是为了保证能把 From 空间中的所有活动对象都收纳到 To 空间里。

最后一个是 RC Immix 算法(Reference Counting Immix)是 2013 年由 Rifat Shahriyar 等人开发的 。改善了引用计数法的“合并型引用计数法”(Coalesced Reference Counting),与以往的引用计数法相比,其吞吐量平均提升了 12%。根据基准测试程序的情况,甚至会超过搜索型 GC。

所以,我们猿,

程序垃圾可不要乱丢,

垃圾回收算法赶快学起来呀!


640?wx_fmt=jpeg

Ruby之父松本行弘推荐,

254幅图解,轻松掌握GC经典算法 

640?wx_fmt=png

扫一扫,京东购

《垃圾回收的算法与实现》

作者:中村成洋 相川光

审校:竹内郁雄

译者:丁灵


本书分为“算法篇”和“实现篇”两大部分。算法篇介绍了标记–清除算法、引用计数法、复制算法、标记–压缩算法、保守式GC、分代垃圾回收、增量式垃圾回收、RC Immix算法等几种重要的算法;实现篇介绍了垃圾回收在Python、DalvikVM、Rubinius、V8等几种语言处理程序中的具体实现。本书适合各领域程序员阅读。


640?wx_fmt=jpeg

正在编辑中,敬请期待......

《G1 GC的算法和实现》

作者:中村成洋

本书分为“算法篇”和“实现篇”两大部分。算法篇介绍了 G1 GC 的概要、并发标记、疏散、软实时性和分代式 G1 模式;实现篇则主要讲解了利用 HotSpot VM 的对象管理功能实现 GC、对象的数据结构和内存分配器、使用了 G1 GC 的线程管理以及 G1 GC 并发标记、疏散、调度器等的具体实现。 

文末畅聊

小伙伴说说你眼中的垃圾分类。如果让你设计一款好用的垃圾分类 APP,你会想设计什么样的?精选留言选出 5 位获得任意算法赠书一本。活动截至 2019.7.16。

题图来源:freepik.com

推荐阅读:

这本书让我摆脱了被数学支配的恐惧!

7月书讯:夏天的韵味!
三周写出高性能的Python代码,这些小技巧你值得一试。


☟ 更多算法书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值