Python 是如何進行內存管理的?python 的程序會內存泄露嗎?說說有沒有什麼方面防止或檢測內存泄露?

Python GC主要使用 引用計數 來跟蹤和回收垃圾。在引用計數的基礎上,經過「標記-清除」解決容器對象可能產生的循環引用問題。經過分代
以空間換時間的方法提升垃圾回收效率

    引用計數: 每一個對象中都有ob-refcnt來作引用計數。當一個對象...,ob-refcnt就會增長,當引用的對象刪除,那麼ob-refcnt就會減小當ob-refcnt爲零,就會釋放該對象的內存空間
    標記清除: 解決循環引用的問題。先按需分配,等到沒有空閒內存的時候,從寄存器和程序棧上的引用出發,遍歷全部對象和引用把全部能訪問的打標記,最後將沒有標記的對象釋放掉
    分代技術: 提升效率,提升垃圾回收的效率,按照存活時間,分紅不一樣的集合。將內存塊按照其存活時間劃分爲不一樣的集合。每一個集合就稱爲一個「代」,垃圾回收的頻率隨代的存活時間增大而減少。Python默認定義分代對象集合,引用數越大,對象的存活時間越長

Python也會內存泄露,Python自己的垃圾回收機制沒法回收重寫了del的循環引用的對象.

    程序員管理好每一個python對象的引用,儘可能在不須要使用對象的時候,斷開全部引用
    儘可能少經過循環引用組織數據,能夠改用weakref作弱引用或者用id之類的句柄訪問對象
    經過gc模塊的接口能夠檢查出每次垃圾回收有哪些對象不能自動處理,再逐個逐個處理
相關文章
相關標籤/搜索