簡體   English   中英

Python3.4內存使用率

[英]Python3.4 memory usage

考慮這兩個代碼,我在python控制台中運行:

l=[]
for i in range(0,1000): l.append("."*1000000)
# if you check your taskmanager now, python is using nearly 900MB
del l
# now python3 immediately free-d the memory

現在考慮一下:

l=[]
for i in range(0,1000): l.append("."*1000000)
l.append(l)
# if you check your taskmanager now, python is using nearly 900MB
del l
# now python3 won't free the memory

由於我正在使用此類對象,並且需要從內存中釋放它們,因此我需要知道以便讓python認識到它需要刪除相應的內存。

PS:我正在使用Windows7。

由於您已經創建了循環引用,因此只有在垃圾收集器運行,檢測到循環並進行清理之后,才會釋放內存。 您可以手動觸發

import gc
gc.collect()  # Memory usage will drop once you run this.

收集器偶爾會自動運行,但前提是必須滿足與對象分配/釋放的數量有關的某些條件

gc.set_threshold(threshold0 [,threshold1 [,threshold2]])

設置垃圾收集閾值(收集頻率)。 將threshold0設置為零將禁用收集。

GC根據對象存活的收集掃描次數將其分為三代。 新對象放置在最年輕的一代(第0代)中。 如果對象在集合中幸存下來,則將其移入下一代。 由於第2代是最老的一代,因此該代中的對象在收集后仍保留在那里。 為了確定何時運行,收集器會跟蹤自上次收集以來的數字對象分配和釋放。 當分配數量減去取消分配數量超過閾值0時,收集開始。

因此,如果您繼續在解釋器中創建更多對象,那么最終垃圾收集器將自行啟動。 您可以通過降低threshold0使其更頻繁地發生,或者,當您知道已刪除包含參考循環的對象之一時,可以手動調用gc.collect

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM