摘要:原文鏈接內存管理機制及優化簡析中有兩種內存管理機制共存引用計數當一個對象的引用為時,對象被刪除但是無法處理循環引用垃圾回收在中所有能夠引用其他對象的對象都被稱為容器因此只有容器之間才可能形成循環引用的垃圾回收機制利用了這個特點來尋找需要被釋
原文鏈接:Python內存管理機制及優化簡析
Python 中有兩種內存管理機制共存:
引用計數:當一個對象的引用為0時,對象被刪除(但是無法處理循環引用)
垃圾回收:
在Python中, 所有能夠引用其他對象的對象都被稱為容器(container). 因此只有容器之間才可能形成循環引用. Python的垃圾回收機制利用了這個特點來尋找需要被釋放的對象. 為了記錄下所有的容器對象, Python將每一個 容器都鏈到了一個雙向鏈表中, 之所以使用雙向鏈表是為了方便快速的在容器集合中插入和刪除對象. 有了這個 維護了所有容器對象的雙向鏈表以后, Python在垃圾回收時使用如下步驟來尋找需要釋放的對象:
對于每一個容器對象, 設置一個 gc_refs 值, 并將其初始化為該對象的引用計數值.
對于每一個容器對象, 找到所有其引用的對象, 將被引用對象的 gc_refs 值減1.
執行完步驟2以后所有 gc_refs 值還大于0的對象都被非容器對象引用著, 至少存在一個非循環引用. 因此 不能釋放這些對象, 將他們放入另一個集合.
在步驟3中不能被釋放的對象, 如果他們引用著某個對象, 被引用的對象也是不能被釋放的, 因此將這些 對象也放入另一個集合中.
此時還剩下的對象都是無法到達的對象. 現在可以釋放這些對象了.
值得注意的是, 如果一個Python對象含有 __del__ 這個方法, Python的垃圾回收機制即使發現該對象不可到達 也不會釋放他. 原因是 __del__ 這個方式是當一個Python對象引用計數為0即將被刪除前調用用來做清理工作的. 由于垃圾回收找到的需要釋放的對象中往往存在循環引用的情況, 對于循環引用的對象a和b, 應該先調用哪 一個對象的 __del__ 是無法決定的, 因此Python垃圾回收機制就放棄釋放這些對象, 轉而將這些對象保存起來, 通過gc.garbage這個變量訪問. 程序員可以通過 gc.garbage 手動釋放對象, 但是更好的方法是避免在代碼中定義 __del__ 這個方法.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44626.html
摘要:內部通過引用計數機制來統計一個對象被引用的次數。下一步,就該被我們的垃圾回收器給收走了。而我們垃圾回收機制只有當引用計數為的時候才會釋放對象。以空間換時間的方法提高垃圾回收效率。 人生苦短,只談風月,談什么垃圾回收。據說上圖是某語言的垃圾回收機制。。。我們寫過C語言、C++的朋友都知道,我們的C語言是沒有垃圾回...
摘要:從存儲的字符串表示中檢索原始對象的過程稱為。這稱為命名空間。如果需要八進制或十六進制表示,請使用內置函數或。和有什么區別返回對象,而返回列表,并使用相同的內存,無論范圍大小是多少。它提供了靈活性,并允許開發人員為他們的項目使用正確的工具。 ...
摘要:這里需要說明的是,小的整數對象,將全部直接放置于內存中。內存泄漏上述的機制可以很好減輕的問題,同時可以根據所跑的程序不同的特點來做從而編譯出自己認為合適的。 墻上的斑點 我第一次注意到短褲上的那個破洞,大概是在金年的三月上旬。如果想要知道具體的時間,那就得回想一下當時我看見的東西。我還能夠回憶起,游泳池頂上,搖曳的、白色的燈光不停地映在我的短褲上;有三五名少年一同扎進了水里。哦,那是大...
摘要:內存池機制提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。為了加速的執行效率,引入了一個內存池機制,用于管理對小塊內存的申請和釋放。 注:答案一般在網上都能夠找到。1.對if __name__ == main的理解陳述2.python是如何進行內存管理的?3.請寫出一段Python代碼實現刪除一個list里面的重復元素4.Python里面如何拷貝一個對象?...
摘要:斷言是用來捕獲用戶定義的約束的,不是用來捕獲程序本身的錯誤的。使用自動關閉資源語句可以在代碼塊執行完畢后還原進入該代碼塊時的現場。在文件管理時使用總能保證文件被正常關閉。則是將指向對象。參考資料編寫高質量代碼改善程序的個建議 三元操作符: 我們都知道在C語言中,三元操作符為C ? X : Y,在人們的強烈要求下,python2.5之后三元操作符等價為X if C else Y。...
閱讀 2323·2023-04-26 00:28
閱讀 3067·2019-08-30 15:55
閱讀 2742·2019-08-30 12:47
閱讀 1550·2019-08-29 11:04
閱讀 3150·2019-08-28 18:14
閱讀 945·2019-08-28 18:11
閱讀 1671·2019-08-26 18:36
閱讀 3383·2019-08-23 18:21