内存泄漏和内存溢出

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

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

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

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

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


感觉与内存溢出一样?

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

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


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

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

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

 

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

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

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

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

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

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




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

 

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

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


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


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


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

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


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

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

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


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



 
 
 
 
posted @ 2015-07-11 22:08  王滔  阅读(4018)  评论(0编辑  收藏  举报