使用 Objective-C 以编程方式释放系统内存

2024-03-12

所以,这就是我想做的:

  • 释放系统内存(非活动内存),以同样的方式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(使用前将#替换为@)

使用 Objective-C 以编程方式释放系统内存 的相关文章

随机推荐

  • 外键和模型继承哪个更好?

    我有这样的用例场景 有些地方是游乐场 餐馆 剧院 酒吧 相同place可以有游乐场 餐馆 剧院等 有几种实现方法 使用外键 class Place models Model name models CharField max length
  • 如何检查连接到 GRPC 服务器的客户端

    为了为我的 GRPC 服务器 客户端设置提供更好的调试信息 我正在尝试寻找一个 APIgrpc server这使我能够检查哪些客户端连接到服务器 我发现的最有希望的问题是问题 它给出了如何在 Java GRPC 中执行此操作的起点 http
  • 使用java的X509序列号

    我需要从 X509 证书获取一些数据 如果我在 Windows 中打开证书文件 它会以这种格式显示其序列号 ex 39 65 70 eb d8 9f 28 20 4e c2 a0 6b 98 48 31 0d 我试图使用 java 获取相同
  • 修复了背景附件在 Chrome 中不起作用的问题

    我尝试在 google 上寻求帮助 这似乎是 chrome 中的一个错误 但我仍然找不到解决方案 我已经查看了许多与此类似的 stackoverflow 问题 但这些解决方案仍然没有帮助 当我尝试在页面上向下滚动时 背景图像会闪烁并变得混乱
  • Matlab:bar 不存在公共属性 CData

    Matlab示例代码无法在Matlab 2017a Linux 64位 中运行 https cn mathworks com help matlab ref bar html https cn mathworks com help matl
  • 在堆栈上增长数组

    这本质上是我的问题 在函数的生命周期中 我生成一些整数 然后在也是同一函数一部分的算法中使用整数数组 整数数组仅在函数内使用 因此将数组存储在堆栈上自然是有意义的 问题是在生成所有整数之前我不知道数组的大小 我知道如何在堆栈上分配固定大小和
  • 从另一个 url 加载动态模块 - angular4

    是否可以引用模块 已以 umd 或 es 格式编译 并将其动态加载到已编译的角度应用程序中 主 shell 应用程序托管于 http plugin shell mydomain com http plugin shell mydomain
  • 在没有数据库或用户名的情况下使用 php 密码保护文件夹/页面的最佳方法是什么

    使用没有数据库或用户名但使用 php 密码保护文件夹的最佳方法是什么 基本上 我有一个页面将列出组织的联系人 并且需要密码保护该文件夹 而无需为每个用户提供帐户 只需一个密码 该密码会经常更改并分发给群组 我知道它不是很安全 但我仍然想知道
  • ARM 未定义指令错误

    我在运行嵌入式系统 无协处理器 无 MMU Atmel 9263 时收到未定义指令错误 嵌入式系统的内存范围为 0x20000000 0x23FFFFFF 目前为止我遇到过两个案例 SP 0x0030B840 LR 2000AE78 LR指
  • 何时在 Gradle 任务中使用“<<”

    有时我会看到 task hey lt lt println Hello Gradle 其他时候我看到 task hey println Hello Gradle 什么时候使用 lt lt 你什么时候不这样做 以及为什么 lt lt 是简写d
  • 如何使用 Linq.Expressions 查询集合

    我构建了一个自定义 IQueryable 提供程序 例如 提供者转换查询 c PurchaseDate new DateTime 2011 11 29 c Name Elizabeth Brown 从底层代码到 System Linq Ex
  • Google 地图 V3 可见标记上的 fitBounds

    发现很难获得关于此的清晰信息 但我想要实现的是可见标记上的 fitBounds 该数组定义标题 类别 纬度 经度和 href 它将所有标记添加到地图 但仅显示第一个类别 当您单击其他类别时 它也会显示这些类别 我可以让 fitBounds
  • 在python2虚拟环境中安装python3

    我有一个在 Python 2 虚拟环境中运行的 Flask 应用程序 我想要运行Python 3程序 所以我需要将python3安装到虚拟环境中 我该怎么做呢 我必须重新创建环境吗 这是一次艰难的迁移吗 不建议混合使用多个版本的Python
  • React Router 与 Spring Boot 路由冲突

    我正在前端使用 React 创建 Spring Boot 应用程序 我可以在浏览器中打开该页面 但在后端出现错误 RequestRejectedException The request was rejected because the U
  • Core Audio (iOS 5.1) Reverb2 属性不存在,错误代码 -10877

    我正在玩苹果的示例项目 LoadPresetDemo 我添加了混响音频单元AudioUnit kAudioUnitSubType Reverb2如图所示 这是唯一可用的 iOS 混响 在 CoreAudio 头文件 AudioUnitPar
  • Javascript DOM .querySelector() null 问题

    我正在用纯 JavaScript 编写代码 有很多场景我会使用querySelector 方法 我多次遇到问题 比如 对于以下代码 未捕获类型错误 无法读取 null 的属性 classList document querySelector
  • 使用 Docker compose 传递 Dockerfile 的参数

    我正在尝试在构建阶段使用参数化我的 dockerfiles 并在 Docker compose 中使用参数 例如 在 Docker compose 中 我定义了一项名为 bpp 的服务 如下所示 bpp build context dock
  • 如何在 Flutter 中检测另一个应用程序是否打开?

    已编辑 我想创建一个阻止使用社交媒体应用程序的应用程序 就像他们打开 Instagram 或其他东西一样 Flutter 应用程序就会知道 当我的 Flutter 应用程序打开时 如何检测另一个应用程序 例如 Instagram 或 Twi
  • 数据集可扩展吗?像 myspace 这样的网站会使用它们进行数据检索吗?

    数据集的可扩展性如何 团队成员希望使用数据集进行数据检索和操作 使用内置的数据完整性等来使用对象执行数据更新等 我们的系统预计将扩展到数百万用户 我读到的所有内容都是针对企业环境中的数据集的 我在这里错了还是什么 免责声明 这些是我根据个人
  • 使用 Objective-C 以编程方式释放系统内存

    所以 这就是我想做的 释放系统内存 非活动内存 以同样的方式purge命令确实如此 尽管是以编程方式 我已经尝试过这里的代码 其作者声称它有效 但它所做的只是导致 Mac OS X 冻结 void free up memory int c