华南俳烁实业有限公司

python

當(dāng)前位置:中華考試網(wǎng) >> python >> python編程基礎(chǔ) >> 文章內(nèi)容

python內(nèi)存管理

來(lái)源:中華考試網(wǎng)  [2020年10月4日]  【

  一、對(duì)象的引用計(jì)數(shù)機(jī)制

  python內(nèi)部使用引用計(jì)數(shù),來(lái)保持追蹤內(nèi)存中的對(duì)象,所有對(duì)象都有引用計(jì)數(shù)

  引用計(jì)數(shù)增加的情況:

  1. 一個(gè)對(duì)象分配一個(gè)新名稱(chēng)

  2. 將其放入一個(gè)容器中

  引用計(jì)數(shù)減少的情況:

  1. 使用del語(yǔ)句對(duì)對(duì)象別名顯示的銷(xiāo)毀

  2. 引用超出作用域或被重新賦值

  sys.getrefcount()函數(shù)可以獲得對(duì)象的當(dāng)前引用計(jì)數(shù)

  多數(shù)情況下,引用計(jì)數(shù)比你猜測(cè)的要大得多。對(duì)于不可變數(shù)據(jù)(如數(shù)字和字符串),解釋器會(huì)在程序的不同部分共享內(nèi)存,以便節(jié)約內(nèi)存。

  二、垃圾回收

  當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)歸零時(shí),它將被垃圾收集機(jī)制處理掉。

  當(dāng)兩個(gè)對(duì)象a 和b 相互引用時(shí),del語(yǔ)句可以減少a和b的引用次數(shù),并銷(xiāo)毀用于引用底層對(duì)象的名稱(chēng)。然而由于每個(gè)對(duì)象都包含一個(gè)對(duì)其他對(duì)象的應(yīng)用,因此引用計(jì)數(shù)不會(huì)歸零,對(duì)象也不會(huì)銷(xiāo)毀。(從而導(dǎo)致內(nèi)存泄漏)。為解決這一問(wèn)題,解釋器會(huì)定期執(zhí)行一個(gè)循環(huán)檢測(cè)器,搜索不可訪(fǎng)問(wèn)對(duì)象的循環(huán)并刪除它們。

  三、內(nèi)存池機(jī)制

  python提供了對(duì)內(nèi)存的垃圾收集機(jī)制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。

  1. Pymalloc機(jī)制。為了加速python的執(zhí)行效率,python引入了一個(gè)內(nèi)存池機(jī)制,用于管理對(duì)小塊內(nèi)存的申請(qǐng)和釋放。

  2. python中所有小于256個(gè)字節(jié)的對(duì)象都使用pymalloc實(shí)現(xiàn)的分配器,而大的對(duì)象則使用系統(tǒng)的malloc。

  3. 對(duì)于python對(duì)象,如整數(shù),浮點(diǎn)數(shù)和list,都有其獨(dú)立的私有內(nèi)存池,對(duì)象間不共享它們的內(nèi)存池。也就是說(shuō)如果你分配又釋放了大量的整數(shù),用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)。

責(zé)編:hym
  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語(yǔ)考試
  • 學(xué)歷考試
武隆县| 吴川市| 平谷区| 正定县| 广饶县| 通山县| 双牌县| 淮安市| 交城县| 贡觉县| 桐柏县| 舟山市| 马公市| 平昌县| 阿克苏市| 阿坝| 栾川县| 察雅县| 睢宁县| 内乡县| 百色市| 阿坝县| 潮安县| 庆安县| 铜鼓县| 杭锦后旗| 平泉县| 渭南市| 阿合奇县| 寿宁县| 吕梁市| 基隆市| 喀喇沁旗| 阿坝| 来宾市| 峡江县| 沂源县| 滨海县| 浙江省| 兴仁县| 盐山县|