当前位置: > 手游资讯 > 新手问答 > 清理内存呢(比较有效的内存清理软件?高手们都是怎么手动优化系统和内存的?)

清理内存呢(比较有效的内存清理软件?高手们都是怎么手动优化系统和内存的?)

作者:哪吒游戏网 来源:哪吒游戏网 2020-08-08 07:32:05

清理内存呢(比较有效的内存清理软件?高手们都是怎么手动优化系统和内存的?),哪吒游戏网给大家带来详细的清理内存呢(比较有效的内存清理软件?高手们都是怎么手动优化系统和内存的?)介绍,大家可以阅读一下,希望这篇清理内存呢(比较有效的内存清理软件?高手们都是怎么手动优化系统和内存的?)可以给你带来参考价值。

Windows上的内存清理软件,这就是个伪命题。

Android手机,要清理内存,把切到后台的应用干掉,就一键清理了。Windows上,你把一个缩小化(也没切到后台这概念)的程序(进程)杀掉试试,那就真的杀掉了。真要这么干你自己打开任务管理器就可以干了。

这种‘清理’是整个进程范围的,进程的全部内存空间都干掉了,之前所分配(映射)的物理内存页(working set)会被放到一个free list以供他人使用。如果是用来map文件内容的物理页(通常称为cache)则放到standby list,仍然可以起到cache作用。

那么如何不杀掉一个进程去“清理”它的内存?你试试直接remote spawn一个thread然后VirtualFree,那画面就太美了。

唯一能做的可能就是缩小该进程的working set。所谓working set是指还进程分配的虚拟内存中(注意Windows程序大部分时候申请的都是所谓虚拟内存)真正映射在物理内存的大小,没在这里面的就是暂时写到pagefile了。缩小working set其实就是把更多的放在物理内存页上的内容写到pagefile以释放这页物理内存。

这个确实可以通过SetProcessWorkingSetSize来实现清理内存呢,但是请注意随便减小一个正在运行的进程的workingset,是一件非常坑爹的事情。脑补一下某进程刚申请了一块内存,放了点数据进去,还没用完就被“清理”,写到pagefile。但是当该进程又去访问还地址空间时,这块内容又会从pagefile中被读回来。无缘无故多了两次disk io。当然实际情况比较复杂,这里只是简化了。

那么进程的working set大小究竟应该由谁来管理?显然大部分情况操作系统能更好得替你管理,真没必要操这个心。

系统怎么管理?首先你得理解,物理内存放着不用,那是犯罪。尽可能高效的利用每一页内存才是正道。Windows有三层空闲内存体系。第一层叫zero page list,里面的内存页都是填零的,当有内存需求的时候立刻就能用。第二层叫free list,如果有用户态内存需求则需要先清零变成zero page再分配。第三层叫standby list,通俗理解就是file cache(只是read的),如果前面两层都不够了就会从这里拿,自然也就扔掉了一些file cache。

这三层体系基本保证了新的内存需求能尽快得到满足。普通情况一个进程VirtualFree了一块内存,本来用到的物理页就会直接放到free list,根本不存在一个清理过程。然后会有一些zero page threads专门负责清零工作。而standby list也就是真file cache一般都很大,所以不大可能会发生新的请求会满足不了。

好了什么时候系统会做所谓内存清理?很明显如果3层list都光了那肯定要清理。另一种情况,当他发展最近的物理内存请求比较多的需要由standby list来完成,而不是前两层,那意味着file cache被循环丢得厉害,也会做一次清理。

怎么清理,其实就是走一边进程表然后减小大家的working set重新洗牌。这也是最后一招没办法的办法,diskio太多了。其实大部分时候是不会走到这一步的。zero/free/standby list多数都会被控制在比较健康的水准而不会发生强行清理。

Windows核心从nt开始发展了这么多年才到了今天的水平,memory management这块核心代码估计地球上只有不到5个人敢动清理内存呢,现在这块的掌门人已经是tech fellow级别了。外面所谓什么什么“一键优化”真是很可笑的。

总结:以上内容就是针对清理内存呢(比较有效的内存清理软件?高手们都是怎么手动优化系统和内存的?)详细阐释,如果您觉得有更好的建议可以提供给哪吒游戏网小编,清理内存呢(比较有效的内存清理软件?高手们都是怎么手动优化系统和内存的?)部分内容转载自互联网,有帮助可以收藏一下。



上一篇: 王者荣耀女角色透视器(王者荣耀女英雄去衣图,王者荣耀女英雄透视图片大全)

下一篇:

本文标签:
猜你喜欢