内存泄露会导致程序可用内存耗尽,然后崩溃

以前虽内存泄漏不以为然,因为在几个G内存的电脑上,忘了delete一个对象,能占多大点内存啊?

结果这次出问题了,我的程序彻夜运算,每次执行10遍任务后,程序就会崩溃,一开始根据打印的日志,还以为是自己没有正确载入图片,并且还怀疑到回调函数/刷新函数/锁机制/多线程同步等等,全都怀疑上了。后来发现一个特点,每次程序崩溃的时候,所占用的内存都是1.47G,而且执行任务期间使用的内存稳定增长,从不下降,这才有了初步的认识,原来是内存泄漏搞的鬼(虽然到现在都没有具体找到哪段代码产生的内存泄漏)。还有单次执行任务的时候,从不崩溃,这只能说明是执行后累计的结果。再有就是,使用索引的时候不会出现这种情况,加深了我疑虑,因为两种运行情况下,所使用的回调函数/刷新函数/锁机制/多线程机制等等,都是相同的。

说起来,32位程序可用的内存挺可怜的,只有区区1.47G。以前总是不明白为什么要是有64位程序,现在算是明白了一点。

时间: 2024-08-06 15:57:39

内存泄露会导致程序可用内存耗尽,然后崩溃的相关文章

七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 [email protected]参数 [email protected]和循环retain的使用 6.NSString的内存管理

1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程序闪退. 2.OC内存管理的范围 : 管理任何继承NSObject的对象,对其他的基本数据类型无效. 3.对象类型是程序运行过程中动态分配的,存储在堆区:内存管理主要是对 堆区中的对象的内存管理. 4.OC内存管理的原理 为了防止内存泄露 对象的引用计数器 : 每个OC对象都有自己的引用计数器,是一

android中的内存泄露查找与常见的内存泄露案例分析

常见的内存泄露查找方法请参见:http://hukai.me/android-performance-patterns/ 这篇文章是google发布的android性能优化典范示例,对于渲染.内存GC与电量消耗都做了好的示范. 这里我总结了下,android中常见的内存泄露 1.类中调用registerReceiver后未调用unregisterReceiver(). 在调用registerReceiver后,若未调用unregisterReceiver,其所占的内存是相当大的. 这种情况常见于

c/c++服务器程序内存泄露问题分析及解决

由 www.169it.com 搜集整理 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题:Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考

Unix下C程序内存泄露检测工具:valgrind的安装使用

Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. Valgrind的安装和使用 去官网www.valgrind.org下载最新版本的valgrind,我这里下载的是valgrind 3.11.0.tar.bz2. #tar xvf valgrind

hadoop1.0 TaskTracker因为分布式缓存导致内存泄露的一次问题排查

上周五同事到公司说凌晨的时候有值班同事打电话给他,有部分job卡住了,运行了很长时间都没运行完成,由于是凌晨,他没来得及详细的查看日志,简单的把有问题的tasktracker重启了一下,只有一个节点的TaskTracker进程停掉,让我查一下具体是什么问题.以下是排查过程: 1.登陆到停掉TT进程的处理机 (1).查看磁盘空间 磁盘没有出现空间不足的情况. (2).top查看负载和内存使用情况: 根据上图看出内存和负载都不算高,也不存在僵尸进程. 2.查看进程日志 1.log4j日志: 2014

内存溢出和内存泄露

基本概念 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如系统只有存放integer的空间,但你却申请了存放long,那就是内存溢出.比方说,定义了20个字节大小的内存空间,却写入了21个字节的数据.通俗的说,就是内存不够,没办法支持当前程序.(当发生内存溢出时,程序将无法进行,强制终止.) 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严

内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别

内存溢出(Memory Overflow)和内存泄露(Memory Leak)的区别 内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态. 内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出. 要点: 一.内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件

【转】Java学习---内存泄露与溢出的区别

Java内存泄露与溢出的区别 Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(内存资源耗尽): 而Java内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出. 内存溢出类似数组越届,超出你能存储的数据的上限 内存泄漏,就是内存使用完毕后,不能释放回收重新使用 Java内存泄露与溢出的区别 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出. Java内存泄漏就是没有及时清理内存垃圾,导致系统无法再给你提供内存资源(

[C++常见面试笔试题汇总] 程序设计基础 - 内存分配、sizeof、指针篇

2 内存分配 系统蓝屏,很大原因都是系统自身代码有缺陷引起的,而系统代码缺陷很大程度上与内存分配不当有关.由于内存分配不当引起的堆栈溢出.缓冲区溢出等问题,常常会导致系统瘫痪甚至崩溃,所以理解内存分配对于一名合格的程序员而言非常有必要. 2.1 内存分配的形式有哪些? 一个C/C++编译的程序所占用的系统内存一般分为以下几个部分的内容: (1) 由符号起始的区块(Block Started by Symbol, BSS)段:BSS段通常是指用来存放程序中未初始化的全局数据和静态数据的一块内存区域