所以,这就是我想做的:
- 释放系统内存(非活动内存),以同样的方式
purge
命令确实如此,尽管是以编程方式。
我已经尝试过这里的代码(其作者声称它有效),但它所做的只是导致 Mac OS X 冻结:
void
free_up_memory()
{
int c;
char *p, *q;
for(c = 0; c < 2048; c++)
{
if(!(p = malloc(1024 * 1024)))
{
return;
}
for(q = p; q < p + (1024 * 1024); q += 4096)
{
*q = 1;
}
}
}
有任何想法吗?
现实情况是,代码并没有做到——也永远不会做到——它所声称的那样。这是垃圾。
它要做的就是破坏系统的缓冲区缓存子系统,并可能使机器快速进入分页状态,从而导致看起来完全像锁定的症状。特别是在硬盘驱动器速度较慢(例如 5,400rpm 笔记本电脑驱动器)的系统上。
至少在 RAM 量相对较小的系统上是这样。在 RAM 较大且运行的应用程序负载相对较轻的系统上,该程序将逐出 2GB 缓冲区高速缓存,导致各种 I/O 操作变慢,因为需要从磁盘重新读取各种内容,但实际上并非如此帮助任何事情。
此类事情也没有必要;如果应用程序需要内存,系统将根据需要从缓冲区缓存中逐出页面和/或将内存分页到磁盘(在 OS X 上 - 在 iOS 上,没有分页器能够在很大程度上写入脏页以保持响应能力)。
呼唤至purge
将驱逐各种磁盘缓冲区缓存并模拟冷启动时的条件,但是,同样,这只会破坏系统的缓存机制,而不会真正提高用户级应用程序的性能。正如手册页文档所示,它对于测试应用程序性能非常有用冷缓存状态,但即使这样也有点可疑purge
不会驱逐所有可以驱逐的东西;不会干净地模拟冷状态。
Steve Jessep 的观点非常正确,在某些情况下,可能会调用purge
(或类似的)可能会提高这种情况下的性能。这通常(几乎普遍)在一般情况下会崩溃,因为用户进程 A 无法知道用户进程 B、C、D、....、Z 在附近或附近的任何点可能执行的操作遥远的未来。例子; A 可能会清除一些内容,结果却让 RSS Feed Scraper R 撕下几 MB 的 XML 进行解析和持久化,从而立即使清除无效。更糟糕的是,R 的上次刷新可能仍有一些位潜伏在缓存中,这样 R 的刷新会影响 I/O,使其速度更慢且成本更高(包括消耗电池寿命)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)