国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

python的內存管理

2019-11-14 17:29:54
字體:
來源:轉載
供稿:網(wǎng)友

1.在Python中,整數(shù)和短小的字符,Python都會緩存這些對象,以便重復使用。當我們創(chuàng)建多個等于1的引用時,實際上是讓所有這些引用指向同一個對象。

a = 1b = 1PRint hex(id(a))print hex(id(b))0x1e6e038L0x1e6e038L

id()可以獲得內存地址

2.對象的引用

from sys import getrefcounta = [1, 2, 3]b = aprint(getrefcount(b))a = 1print(getrefcount(b))

getrefcount 可以獲得該對象的引用次數(shù),需要注意的是,當使用某個引用作為參數(shù),傳遞給getrefcount()時,參數(shù)實際上創(chuàng)建了一個臨時的引用。因此,getrefcount()所得到的結果,會比期望的多1。

3.垃圾回收,計數(shù)減少

如果引用對象的次數(shù)為0,那么就會回收。

垃圾回收時,Python不能進行其它的任務。頻繁的垃圾回收將大大降低Python的工作效率。如果內存中的對象不多,就沒有必要總啟動垃圾回收。所以,Python只會在特定條件下,自動啟動垃圾回收。當Python運行時,會記錄其中分配對象(object allocation)和取消分配對象(object deallocation)的次數(shù)。當兩者的差值高于某個閾值時,垃圾回收才會啟動。

我們可以通過gc模塊的get_threshold()方法,查看該閾值:

import gcprint(gc.get_threshold())

返回(700, 10, 10),后面的兩個10是與分代回收相關的閾值,后面可以看到。700即是垃圾回收啟動的閾值。可以通過gc中的set_threshold()方法重新設置。我們也可以手動啟動垃圾回收,即使用gc.collect()。

 

4.分代回收

Python同時采用了分代(generation)回收的策略。這一策略的基本假設是,存活時間越久的對象,越不可能在后面的程序中變成垃圾。我們的程序往往會產(chǎn)生大量的對象,許多對象很快產(chǎn)生和消失,但也有一些對象長期被使用。出于信任和效率,對于這樣一些“長壽”對象,我們相信它們的用處,所以減少在垃圾回收中掃描它們的頻率。

Python將所有的對象分為0,1,2三代。所有的新建對象都是0代對象。當某一代對象經(jīng)歷過垃圾回收,依然存活,那么它就被歸入下一代對象。垃圾回收啟動時,一定會掃描所有的0代對象。如果0代經(jīng)過一定次數(shù)垃圾回收,那么就啟動對0代和1代的掃描清理。當1代也經(jīng)歷了一定次數(shù)的垃圾回收后,那么會啟動對0,1,2,即對所有對象進行掃描。

import gcgc.set_threshold(700, 10, 5)
可以手動設置

  


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大方县| 文山县| 洪江市| 武汉市| 大宁县| 社旗县| 灯塔市| 庆阳市| 岗巴县| 安义县| 水富县| 汉沽区| 肥东县| 岳西县| 达拉特旗| 天水市| 毕节市| 巨野县| 福安市| 柘城县| 林西县| 喜德县| 土默特右旗| 新兴县| 扶余县| 永安市| 五华县| 镇沅| 无锡市| 阜南县| 明光市| 哈尔滨市| 唐山市| 大城县| 龙江县| 于田县| 都昌县| 吴堡县| 多伦县| 吉水县| 北宁市|