1. 程式人生 > >python的記憶體管理機制和調優手段

python的記憶體管理機制和調優手段

python的記憶體管理機制和調優手段

記憶體管理機制

引用計數、垃圾回收、記憶體池

引用計數

引用計數是一種非常高效的記憶體管理手段,當一個python物件被引用時,其引用計數加1,當其不再被一個變數引用時則引用計數減1,當引用計數等於0時物件被刪除。

1. 引用計數

引用計數是一種垃圾收集機制,而且是一種最直觀,最簡單的垃圾收集技術。當python的某一個引用計數降為0時,說明沒有任何引用指向該物件,該物件就成為要被回收的垃圾了。比如,某個新建物件,他被分配給某個引用,物件的引用計數為1。如果引用被刪除,物件的引用計數為0,那麼該物件就可以被垃圾回收。不過如果出現迴圈引用的話,引用計數機制就不再起有效的作用了。

2. 標記清除

如果兩個物件的引用計數都為1,但是僅僅存在他們之間的迴圈引用,那麼則兩個物件都是需要被回收的,也就是說,他們的引用計數雖然表現為非0,但實際上有效的引用計數為0.所以先將迴圈引用摘掉,就會得出兩個物件的有效計數。

3. 分代回收

從前面“標記-清除”這樣的垃圾收集機制來看,這種垃圾收集機制所帶來的額外操作實際上與系統中總的記憶體塊的數量時相關的,當需要回收的記憶體塊越多時,垃圾檢測帶來的額外操作就越多,而垃圾回收所帶來的額外操作就越少;反之,當需要回收的記憶體塊越少時,垃圾檢測就將比垃圾回收帶來更少的額外操作。

4.調優手段

  • 手動垃圾回收
  • 調高垃圾回收閥值
  • 避免迴圈引用(手動解迴圈引用和使用若引用)