首先是内存泄漏,不是内存溢出,它们不一样。
大超市都提供临时存放柜,在买东西之前先把手里的东西放进去。我们把超市提供的这些存放柜比喻成内存,虽然柜子的数量远低于客户的数量,但顾客买完东西后就把柜子清空了,所以不用担心柜子的数量不够用。
几个月过后,超市管理人员发现,最近几天总是柜子不够用,但顾客相比之前人数也不多啊,到了晚上停止营业检查才发现,有很多柜子里面还存放有东西(这里我们假设顾客一旦遗忘就不要了),难怪柜子不够用,原来是这几个月忘取的顾客积累造成的。顾客因为遗忘造成的柜子长时间没有清空,影响后面的人使用,我们就把这个称为内存泄漏。
内存泄漏一般不会造成Bug,但会随着长时间的积累造成电脑反应迟钝,电脑还好说,每天一关机就解决了。但手机和服务器这些长年累月不关机的就非常在乎内存泄漏问题。想来这也是某些Bug,电脑一重启就正常了的原因吧。
现在开发程序,一般编程语言都提供内存自动回收功能,确实让程序员省心了不少,但还是有一些回收功能是收不了的它的,还需程序员格外操心,比如强引用循环。
我们继续用超市的临时存放柜来解释什么是强引用循环。
一对小情侣去逛超市,因手里的东西太多用了两个存放柜,男的东西放到了A01柜子里面,女的东西放到了A02柜子里面。买完东西后发现,男的开柜票放到了A02个柜子里面,女的开柜票放到了A01柜子里面,只有先打开其中一个,才能取去开柜票去开另一个。
以上就是强引用循环的例子,编程语言也提供弱引用声明,避免把开柜票放到柜子里面。
再说个题外话,这让我想起来了我的一个朋友,冬天把衣服送到洗衣店,过了两三年才取。我想洗衣店应该扔了,没想到他竟然把衣服给取出来了,洗衣店也没有多收钱。
最后,关注我,带你梳理更多IT知识。
看到此处说明本文对你还是有帮助的,关于“以生活中的例子解读什么是内存泄漏”留言是大家的经验之谈相信也会对你有益,推荐继续阅读下面的相关内容,与本文相关度极高!