1.python內(nèi)存管理機(jī)制
(1).引用計(jì)數(shù)
(2). 垃圾回收
(3). 內(nèi)存池機(jī)制
引用計(jì)數(shù)
在python中每創(chuàng)建一個(gè)對(duì)象,對(duì)應(yīng)的會(huì)有一個(gè)引用計(jì)數(shù)焕襟,當(dāng)發(fā)生賦值操作如a=b敌蚜,對(duì)應(yīng)的b的引用計(jì)數(shù)會(huì)自動(dòng)加1,當(dāng)引用的對(duì)象被清除或者函數(shù)結(jié)束時(shí),引用計(jì)數(shù)會(huì)自動(dòng)減1啼肩。
垃圾回收:
在python中使用引用計(jì)數(shù),標(biāo)記清楚衙伶,分代回收三種方式進(jìn)行垃圾回收祈坠。
其中,引用計(jì)數(shù)當(dāng)對(duì)象的引用計(jì)數(shù)歸0時(shí)矢劲,對(duì)象會(huì)自動(dòng)被清除赦拘。標(biāo)記清除機(jī)制是首先遍歷所有對(duì)象,如果對(duì)象可達(dá)芬沉,就說明有變量引用它躺同,則標(biāo)記其為可達(dá)的阁猜。如果不可達(dá),則對(duì)其進(jìn)行清除蹋艺。分代回收是當(dāng)對(duì)象創(chuàng)建時(shí)被標(biāo)記為第0代剃袍,經(jīng)過一次垃圾回收之后,余下的對(duì)象被標(biāo)記為第1代捎谨,最高為第2代民效。其原理是,對(duì)象的生存期越長(zhǎng)涛救,月可能不是垃越畏邢。
內(nèi)存池機(jī)制
ython語言雖然提供了對(duì)內(nèi)存的垃圾收集機(jī)制,但實(shí)際上它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)州叠,所以就有了以下:
1 Pymalloc機(jī)制棵红;這個(gè)主要是為了加速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)存池萝挤。換句話說就是御毅,假設(shè)你分配并且釋放了大量的整數(shù),那么用于緩存這些整數(shù)的內(nèi)存就不能再分配給浮點(diǎn)數(shù)怜珍。