热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

应用程序使用的内存大小非常快-MemorysizeusedbytheappgrowsVERYfast

WroteasimpleprogramtofillALLTHESPACEonmydrive.Ithasaverysimplelogic:写了一个简单的程序来填充我的

Wrote a simple program to fill ALL THE SPACE on my drive. It has a very simple logic:

写了一个简单的程序来填充我的驱动器上的所有空间。它有一个非常简单的逻辑:

  • 10 Create a file
  • 10创建文件

  • 20 Write N (40 in my case) random blocks size of M (100 MiB in my case)
  • 20写N(我的情况下是40)随机块大小为M(在我的情况下为100 MiB)

  • 30 Close a file
  • 30关闭文件

  • 40 GOTO 10
  • 40 GOTO 10

Well, I just created a new Cocoa project from scratch and placed the code in the applicationDidFinishLaunching. Here is it.

好吧,我刚从头创建了一个新的Cocoa项目,并将代码放在applicationDidFinishLaunching中。就这个。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    fm = [NSFileManager new];

    unsigned long long size = 0;
    unsigned long long sizeMax = 0;

    NSString *path;
    NSData *data;
    NSFileHandle *myHandle;
    for (long i = 0; ; ++i) {
        if (i % 40L == 0) { // N = 40
            sizeMax = [self currentMaxSize];
            size = 0;

            path = [NSString stringWithFormat:@"/Users/user/Desktop/loltest/lol_%f.txt", [NSDate timeIntervalSinceReferenceDate]];

            [fm createFileAtPath:path contents:[NSData data] attributes:nil];
            [myHandle closeFile];
            myHandle = [NSFileHandle fileHandleForWritingAtPath:path];
        }

        [myHandle seekToEndOfFile];

        data = [self randomData];
        size += data.length;
        [myHandle writeData:data];
        data = nil;

        if (size >= sizeMax) {
            [myHandle closeFile];
            break;
        }
    }

    NSLog(@"OKAY");
}

- (unsigned long long)currentMaxSize
{
    return [[fm attributesOfFileSystemForPath:@"/" error:nil][NSFileSystemFreeSize] unsignedLongLongValue];
}

- (NSData *)randomData
{
    const int LENGTH = 100 * 1024 * 1024; // M
    char *bytes = (char *)malloc(LENGTH * sizeof(char)); // Well that supposed to be static and dispatched_once, but I removed that when tried to fix leaks

    for (NSInteger i = 0; i 

When I ran that one, after 1 minute 1 GiB leaked and still. Ended on the system's memory management window and activity monitor showing me 60 GiB of swap used.

当我跑了那个,1分钟后1 GiB泄露并且仍然。结束系统的内存管理窗口和活动监视器,显示我使用的60 GiB交换。

I ran the Instruments which said me that Overall bytes section is equal to what the activity monitor shows for the app. However, there is only one object at a time, the allocation graph is a saw, the pointer of the random data is constant between function calls. Maybe NSData somehow holds the source array, but I can't solve this puzzle at all.

我运行的仪器告诉我,整体字节部分等于活动监视器为应用程序显示的内容。但是,一次只有一个对象,分配图是一个锯,随机数据的指针在函数调用之间是恒定的。也许NSData以某种方式持有源数组,但我根本无法解决这个难题。

Saw

1 个解决方案

#1


6  

You probably want an @autoreleasepool { } around the content of that loop, otherwise the temporary objects it creates won't be cleaned up. That may be the source of your problem.

您可能希望围绕该循环的内容使用@autoreleasepool {},否则它将创建的临时对象将不会被清除。这可能是您问题的根源。


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 深入解析C语言中的关键字及其分类
    本文将全面介绍C语言中的关键字,并按照功能将其分为数据类型关键字、控制结构关键字、存储类别关键字和其他关键字四大类,旨在帮助读者更好地理解和运用这些基本元素。C语言中共有32个关键字。 ... [详细]
  • 本文探讨了在 PHP 的 Zend 框架下,使用 PHPUnit 进行单元测试时遇到的 Zend_Controller_Response_Exception 错误,并提供了解决方案。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • UVa 11683: 激光雕刻技术解析
    自1958年发明以来,激光技术已在众多领域得到广泛应用,包括电子设备、医疗手术工具、武器等。本文将探讨如何使用激光技术进行材料雕刻,并通过编程解决一个具体的激光雕刻问题。 ... [详细]
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 本文探讨了在 macOS Retina 显示屏上使用 OpenJDK 11 开发代码编辑器时遇到的等宽字体渲染问题,并提供了详细的分析和可能的解决方案。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 在Objective-C中,若需在文本字段(TextField)中精确控制并显示小数点后的位数,例如保留两位小数,可以通过格式化字符串的方式实现。具体做法是在属性声明时使用`.2f`来指定保留两位小数,如:`@property (nonatomic) float num111;`,并在设置文本字段内容时采用`[NSString stringWithFormat:@"%.2f", self.num111]`进行格式化输出。这种方法不仅保证了数值的精确显示,还提升了用户界面的友好性。 ... [详细]
author-avatar
漂亮的花裙子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有