內存泄漏和內存溢出


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

現在發現概念是內存區域沒有釋放掉。

內存泄漏造成的表現形式是,進程越來越慢。慢的原因是,它申請的內存越來越多,沒有釋放掉內存。
而操作系統對進程的內存占用有限制。操作系統會將大的進程置換到磁盤去。換到磁盤去就導致速度慢了。
主要是磁盤的速度跟不上。

這讓我聯想到以前自己的系統,變得那么慢。磁盤原因。
虛擬的內存,不是真實占用這么多物理內存。而是需要申請更多內存 。操作系統只能將這樣的進程換到虛擬內存中去,虛擬內存就是在磁盤的空間。

 
 
 
為什么內存占用越來越多后,就會導致進程慢呢?根源是什么?


感覺與內存溢出一樣?

應用程序可以申請很多內存,操作系統並沒有對進程申請多少內存進行限制,也就是說,可以無限度地申請。
為什么操作系統沒有做限制?不知道!

操作系統沒有做限制,需要的時候就分配內存,這就是動態創建內存叫法的本義。


如果沒有更多內存可用呢?內核程序就處在等待分配中,機器掛起狀態。

這是虛擬內存,操作系統沒有更多內存申請,就會調度。

這個調度算法是怎么算的呢?

 

一個是存儲的數據,內存存不下了。

溢出,想象裝水的容器,水裝不下就會溢出。內存也是這樣。

為什么有些解釋法是,內存區域沒有指針指向它。這種內存空間就是內存泄漏。

Linux上有什么工具可以檢測內存泄漏呢?

原理是不是檢測內核對內存的申請,有沒有處在等待中種。申請不到內存就會是等待中。

思路是檢測內核。內核的調用非常頻繁。可以實時監測到。
 
 




一般一個操作系統上對進程使用內存的最大限制是4g。32位操作系統是這樣。
大的進程移動到磁盤需要花費時間(磁盤i/0)

 

如何才能讓自己用這個知識解決php的問題呢。

內存泄漏,將內存耗盡。什么情況會?因為沒有釋放掉。


內存溢出,申請不到可用的內存。


為什么站在操作系統的角度來說泄漏的呢?


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

Bad-gatway,表示的是很累。而502則是超時。
 


引用計數的變量,只有在引用數變為0時才釋放掉。
網上說,常見的bug就是沒有將引用計數器減1。導致沒有釋放掉。

有垃圾回收機制可以讓程序員省心。關鍵是這個垃圾回收機制要怎么設計。刪除引用數為0的變量?

一個進程占用20m。怎么理解這個進程調度呢。


如何調用哪個進程處理呢。



 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM