内存泄漏和内存溢出

 

 

 

什么是内存泄漏,我以前以为是内存被人可以拿到里面内容。

现在发现概念是内存区域没有释放掉。

内存泄漏造成的表现形式是,进程越来越慢。慢的原因是,它申请的内存越来越多,没有释放掉内存。
而操作系统对进程的内存占用有限制。操作系统会将大的进程置换到磁盘去。换到磁盘去就导致速度慢了。
主要是磁盘的速度跟不上。

这让我联想到以前自己的系统,变得那么慢。磁盘原因。
虚拟的内存,不是真实占用这么多物理内存。而是需要申请更多内存 。操作系统只能将这样的进程换到虚拟内存中去,虚拟内存就是在磁盘的空间。

 

 

 

为什么内存占用越来越多后,就会导致进程慢呢?根源是什么?

感觉与内存溢出一样?

应用程序可以申请很多内存,操作系统并没有对进程申请多少内存进行限制,也就是说,可以无限度地申请。
为什么操作系统没有做限制?不知道!

操作系统没有做限制,需要的时候就分配内存,这就是动态创建内存叫法的本义。

如果没有更多内存可用呢?内核程序就处在等待分配中,机器挂起状态。

这是虚拟内存,操作系统没有更多内存申请,就会调度。

这个调度算法是怎么算的呢?

 

一个是存储的数据,内存存不下了。

溢出,想象装水的容器,水装不下就会溢出。内存也是这样。

为什么有些解释法是,内存区域没有指针指向它。这种内存空间就是内存泄漏。

Linux上有什么工具可以检测内存泄漏呢?

原理是不是检测内核对内存的申请,有没有处在等待中种。申请不到内存就会是等待中。

思路是检测内核。内核的调用非常频繁。可以实时监测到。

 

 

一般一个操作系统上对进程使用内存的最大限制是4g。32位操作系统是这样。
大的进程移动到磁盘需要花费时间(磁盘i/0)

 

如何才能让自己用这个知识解决php的问题呢。

内存泄漏,将内存耗尽。什么情况会?因为没有释放掉。

内存溢出,申请不到可用的内存。

为什么站在操作系统的角度来说泄漏的呢?

参考http://m.111cn.net/art-55371.htm。

Bad-gatway,表示的是很累。而502则是超时。

 

引用计数的变量,只有在引用数变为0时才释放掉。
网上说,常见的bug就是没有将引用计数器减1。导致没有释放掉。

有垃圾回收机制可以让程序员省心。关键是这个垃圾回收机制要怎么设计。删除引用数为0的变量?

一个进程占用20m。怎么理解这个进程调度呢。

如何调用哪个进程处理呢。

 

 

 

 

时间: 2024-10-26 06:14:50

内存泄漏和内存溢出的相关文章

科普:内存泄漏与内存溢出

最近项目中频繁出现OOM的问题,各种路径测试.内存走向分析.各种逻辑推理才最终定位到问题.在这过程中和组内的同学讨论的时候发现有的同学对内存泄漏和内存溢出的概念理解不到位,导致沟通过程比较尴尬.很多同学对这两个概念理解不够透彻,在项目中频繁写出内存泄漏的低级代码出来.结合自己的理解我写一篇文章理解下这两个概念. 内存泄漏 内存泄漏是指那些本应该回收(不再使用)的内存对象无法被系统回收的现象.在c++中需要程序猿手动释放内存对象,所以在C++中更容易存在内存泄漏.java引入了自动回收机制,使得在

Java内存泄漏与内存溢出详解

内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态. 内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出. 内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的. 内存泄漏可以分为4类: 1)常发性内存泄漏.发生内存泄漏的代码会被多次执行到,每

内存泄漏和内存溢出的区别

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光. memory leak会最终会导致out of memory! 内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产

内存泄漏-link内存排序为什么还不如文件排序快?

问题描述 link内存排序为什么还不如文件排序快? link内存排序为什么还不如文件排序快?是不是发生了内存泄漏? 解决方案 你听谁说的?还有要看是不是同等条件,比如说本身就是有序的文件,可以做归并排序,linq默认是快速排序,那显然后者快了. 解决方案二: 内存泄露,应该不会影响速度啊!除非算法有问题!你所说的两种排序的算法一样吗?处理的数据量一样吗?

Android 内存泄漏总结

Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题.内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收.最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量. 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以

Java系统中内存泄漏测试方法的研究

摘 要 稳定性是衡量软件系统质量的重要指标,内存泄漏是破坏系统稳定性的重要因素.由于采用垃圾回收机制,Java语言的内存泄漏的模式与C++等语言相比有很大的不同.全文通过与C++中的内存泄漏问题进行对比,讲述了Java内存泄漏的基本原理,以及如何借助Optimizeit profiler工具来测试内存泄漏和分析内存泄漏的原因,在实践中证明这是一套行之有效的方法. 关键词 Java; 内存泄漏; GC(垃圾收集器) 引用; Optimizeit 问题的提出 笔者曾经参与开发的网管系统,系统规模庞大

Android 优化二 Java内存分配机制及内存泄漏

Java内存分配机制及内存泄漏目录介绍 1.JVM内存管理 1.1 JVM内存管理图 1.2 Java采用GC进行内存管理. 2.JVM内存分配的几种策略 2.1 静态的 2.2 栈式的 2.3 堆式的 2.4 堆和栈的区别 2.5 得出结论 2.6 举个例子 2.7 调用 System.gc();进行内存回收 3.GC简单介绍 3.1 内存垃圾回收机制 3.2 关于GC介绍 3.3 如何监听GC过程 3.4 GC过程与对象的引用类型关系 4.内存泄漏简单介绍 4.1 内存泄漏的定义 4.2 内

Java中关于内存泄漏出现的原因汇总及如何避免内存泄漏(超详细版)_java

Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题.内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收.最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量. 我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以

Android开发中常见的内存泄漏及避免总结

内存泄漏产生的原因 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. 内存泄漏对程序的影响? 内存泄漏是造成应用程序OOM的主要原因之一!我们知道Android系统为每个应用程序分配的内存有限,而当一个应用中产生的内存泄漏比较多时,这就难免会导致应用所需要的内存超过这个系统分配的内存限额,这就造成了内存溢出而导致应用Crash. Android中常见的内存泄漏汇总 单例造