操作系统的内存释放原理

今天闲来无事,看到360的内存加速球,想着探索一下其中的原理,于是知乎之,得到答案如下:

作者:崔巍
链接:https://www.zhihu.com/question/48612888/answer/111774710
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

内存以页为单位进行管理。内存页可以保存在内存中,也可以保存在本地的页面文件中。
所谓的内存清理,就是一个程序不停申请内存,从而不停的触发操作系统的内存重分配策略。直到用完系统可用的内存后再宣布释放内存,就把这些内存变成了空的状态。
在这个情况下,内存页的影响分以下几种:
1 当前程序正在使用的内存页:不动。
2 当前程序暂时并没有使用的内存页:写入硬盘的页面文件,并释放。如果当前程序要使用,就只能从页面文件再读回来。
3 IO的读缓存:删除。
4 IO的写缓存:写入完成后删除。

在Windows正常管理的情况下,对于前面的几种情况:
1 当前程序正在使用的内存页:不动。
2 当前程序暂时并没有使用的内存页:当有程序需要内存的时候,且3、4无法满足时,写入页面文件并标记为可以使用。但如果一直没有被使用。而当前程序又需要的时候,就可以直接再分配给这个程序。由于数据没有被清除,就不必再读一次硬盘。
3 IO的读缓存:不常用后,删除。
4 IO的写缓存:写入完成后删除。

所以结果是,只有两种情况下有效:
1 好看。
2 做好准备,为了用最快的速度迎接下一次大内存分配。比如你打算玩一个大型游戏,而想尽可能的加快载入时间,可以先做一次内存整理的动作。但实际上考虑到内存整理本身的时间,其实总时间就需要更多。

但是,就算你不人工触发内存整理的动作,当程序需要内存而当前没有可用内存的时候,操作系统自己就会按需触发内存重新分配的上述动作。

而由于放弃了读缓存,并强制写入暂时没有使用的内存页到硬盘,还在之后可能需要再从硬盘读回来,因此如果在内存整理后没有用完所有新释放的内存,这些额外的工作就毫无意义,只会拖慢速度

我来尝试着举一个通俗点的例子吧。

电脑的内存就是市中心,原本大家工作得不亦乐乎。但市中心的地方终究是有限的,人多了总会住不下(内存不足),所以,那些最近不工作(不被使用)的就会搬到偏远的地方(硬盘上的页面文件)去住,反正不工作,住哪都一样。

现在清理软件来了,为了营造出都市很空旷闲适的感觉(内心很充足的错觉),就派了大批无关人士进来,把大家都赶了出去(内存移到页面文件)。
眼瞅着人都搬的差不多了(正在工作的总不能搬家),这些无关人士又凭空消失了(释放内存),所以城市就空旷了起来。

当然还有一种办法是直接关闭没什么卵用的公司(关闭无用程序),这样公司的员工就会消失从而腾出位置了。不过事实上并没有那么多不干正事的公司。

问题是,搬走的人可能只是休假一两天,马上就要回来工作。而连接市中心和边缘地区的交通是很差的(内存速度远高于硬盘),所以搬家就造成了交通堵塞,反而让大家上班迟到了!生产效率也下降了!


嗯,就是这样。
写于堵在路上的一辆从山里开往城里的公交车上。


作者:XZiar
链接:https://www.zhihu.com/question/48612888/answer/111913691
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总体来说,这种加速球的原理就是自己申请大块内存,强迫操作系统进行非运行内存回收,然后再把自己申请的大块内存释放掉,可以用于解燃煤之急,有点类似于割股充饥,并不能从根本上解决内存不足的问题。

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值