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