什麼是記憶體洩漏,我以前以為是記憶體被人可以拿到裡面內容。
現在發現概念是記憶體區域沒有釋放掉。
記憶體洩漏造成的表現形式是,程式越來越慢。慢的原因是,它申請的記憶體越來越多,沒有釋放掉記憶體。
而作業系統對程式的記憶體佔用有限制。作業系統會將大的程式置換到磁碟去。換到磁碟去就導致速度慢了。
主要是磁碟的速度跟不上。
這讓我聯想到以前自己的系統,變得那麼慢。磁碟原因。
虛擬的記憶體,不是真實佔用這麼多實體記憶體。而是需要申請更多記憶體 。作業系統只能將這樣的程式換到虛擬記憶體中去,虛擬記憶體就是在磁碟的空間。
為什麼記憶體佔用越來越多後,就會導致程式慢呢?根源是什麼?
感覺與記憶體溢位一樣?
應用程式可以申請很多記憶體,作業系統並沒有對程式申請多少記憶體進行限制,也就是說,可以無限度地申請。
為什麼作業系統沒有做限制?不知道!
作業系統沒有做限制,需要的時候就分配記憶體,這就是動態建立記憶體叫法的本義。
如果沒有更多記憶體可用呢?核心程式就處在等待分配中,機器掛起狀態。
這是虛擬記憶體,作業系統沒有更多記憶體申請,就會排程。
這個排程演算法是怎麼算的呢?
一個是儲存的資料,記憶體存不下了。
溢位,想象裝水的容器,水裝不下就會溢位。記憶體也是這樣。
為什麼有些解釋法是,記憶體區域沒有指標指向它。這種記憶體空間就是記憶體洩漏。
Linux上有什麼工具可以檢測記憶體洩漏呢?
原理是不是檢測核心對記憶體的申請,有沒有處在等待中種。申請不到記憶體就會是等待中。
思路是檢測核心。核心的呼叫非常頻繁。可以實時監測到。
一般一個作業系統上對程式使用記憶體的最大限制是4g。32位作業系統是這樣。
大的程式移動到磁碟需要花費時間(磁碟i/0)
如何才能讓自己用這個知識解決php的問題呢。
記憶體洩漏,將記憶體耗盡。什麼情況會?因為沒有釋放掉。
記憶體溢位,申請不到可用的記憶體。
為什麼站在作業系統的角度來說洩漏的呢?
參考http://m.111cn.net/art-55371.htm。
Bad-gatway,表示的是很累。而502則是超時。
引用計數的變數,只有在引用數變為0時才釋放掉。
網上說,常見的bug就是沒有將引用計數器減1。導致沒有釋放掉。
有垃圾回收機制可以讓程式設計師省心。關鍵是這個垃圾回收機制要怎麼設計。刪除引用數為0的變數?
一個程式佔用20m。怎麼理解這個程式排程呢。
如何呼叫哪個程式處理呢。