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

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

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

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

但是,就算你不人工触发内存整理的动作,当程序需要内存而当前没有可用内存的时候,操作系统自己就会按需触发内存重新分配的上述动作。
而由于放弃了读缓存,并强制写入暂时没有使用的内存页到硬盘,还在之后可能需要再从硬盘读回来,因此如果在内存整理后没有用完所有新释放的内存,这些额外的工作就毫无意义,只会拖慢速度

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

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

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

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

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

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

操作系统的内存释放原理相关推荐

  1. 所谓的内存释放工具——原理

    所谓的内存释放工具--原理 刚才逆向了一个内存释放的小工具,原来是调用了SetProcessWorkingSetSize()函数,MSDN一下. 此函数原型如下: BOOL SetProcessWor ...

  2. python查看哪些内存被释放_python内存不释放原理 | shell's home

    在maillist里面看到无数次的有人问,python速度为什么这么慢,python内存管理很差.实话说,我前面已经说过了.如果你在意内存/CPU,不要用python,改用C吧.就算C不行,起码也用个 ...

  3. 从内存管理原理,窥探OS内存管理机制

    摘要:本文将从最简单的内存管理原理说起,带大家一起窥探OS的内存管理机制,由此熟悉底层的内存管理机制,写出高效的应用程序. 本文分享自华为云社区<探索OS的内存管理原理>,作者:元闰子 . ...

  4. JAVA内存释放机制

    和内存释放(主要是GC)有关的话题. ★JVM的内存? 在Java虚拟机规范中(具体章节请看"这里 "),提及了如下几种类型的内存空间: ◇栈内存(Stack):每个线程私有的. ...

  5. Linux内存管理原理笔记

    一.内存管理 1. 每个进程应该有自己的内存空间.内存空间都是独立的.相互隔离的.对于每个进程来讲,看起来应该都是独占的.进程不能直接访问物理内存地址,因为假如三个程序同时访问或写入同一个物理内存地址 ...

  6. 一文看懂内存池原理及创建(C++实现)

    1. 什么是内存池 1.1 池化技术 池是在计算技术中经常使用的一种设计模式,其内涵在于:将程序中需要经常使用的核心资源先申请出来,放到一个池内,有程序自管理,这样可以提高资源的利用率,也可以保证本程 ...

  7. linux环境内存分配原理

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  8. linux内存释放和使用限制

    1.内存释放 命令:echo 1 > /proc/sys/vm/drop_caches 解释: drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1: ...

  9. JAVA中堆栈和内存分配原理

    JAVA中堆栈和内存分配原理 1.栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在 ...

最新文章

  1. 系统初始化时kernel_init在内核态创建和运行应用程序以完成系统初始化
  2. IOS项目之分层MVVM
  3. 路由器qos设置包括哪些内容
  4. Android远程过程通讯,Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析(3)...
  5. Arduino教程 初体验之点亮自带LED灯(含管脚图)
  6. 地球上20张最惊人照片!不看将后悔一辈子
  7. 自体脂肪填充面部能保持多长时间,这是能说的吗
  8. DirectX是什么
  9. 【NOI科目校 信息学知识点测评-组合计数专题】展览方案
  10. 网络信息安全从业者,持NISP二级或CISP证书,最高可补贴30000元
  11. 围堵Zoom, 谷歌救得了自己,还是能终结在线办公乱局?
  12. 微信扫描二维码调用手机外部浏览器打开下载apk的链接
  13. 电子信息类与计算机类
  14. 杭州人才补助领取遇到的问题
  15. 用js实现动态添加删除表格数据
  16. 四年奋斗在深圳的程序员,今年选择回了老家
  17. Linux中cd命令和pwd命令的用法
  18. UDS学习笔记(三)——协议的理解
  19. CPU性能优化:Cache
  20. 给Excel 增加根据身份证号码求性别和身份证校验的函数

热门文章

  1. 2020中国区块链产业园月度报告(10月)|链塔智库
  2. 1045 Favorite Color Stripe (30分)
  3. synchronized - 不要锁常量
  4. C语言中fopen()函数的使用方法
  5. 详细解析黑马微信小程序视频--【思维导图知识范围】
  6. C#,码海拾贝(07)——埃尔米特(Hermite)曲线插值算法C#源程序
  7. 报错的解决 sqlite3.OperationalError: unrecognized token: “630008.OF“
  8. 总结Vue第一天~简单介绍、基本知识、辅助函数和js数组的高阶函数
  9. 一款自动写文案的神器——西瓜树元引擎智能文案工具
  10. 国企外包制下的项目需求进度管理