Python面試真題-Python是如何進(jìn)行內(nèi)存管理的?
? ? ? Python引用了一個(gè)內(nèi)存池(memory pool)機(jī)制,即Pymalloc機(jī)制(malloc:n.分配內(nèi)存),用于管理對(duì)小塊內(nèi)存的申請(qǐng)和釋放
內(nèi)存池(memory pool)的概念:
當(dāng)創(chuàng)建大量消耗小內(nèi)存的對(duì)象時(shí),頻繁調(diào)用new/malloc會(huì)導(dǎo)致大量的內(nèi)存碎片,致使效率降低。內(nèi)存池的概念就是? ?預(yù)先在內(nèi)存中申請(qǐng)一定數(shù)量的,大小相等 的內(nèi)存塊留作備用,當(dāng)有新的內(nèi)存需求時(shí),就先從內(nèi)存池中分配內(nèi)存給這個(gè)需求,不夠了之后再申請(qǐng)新的內(nèi)存。這樣做最顯著的優(yōu)勢(shì)就是能夠減少內(nèi)存碎片,提升效率。
內(nèi)存池的實(shí)現(xiàn)方式有很多,性能和適用范圍也不一樣。
Python中的內(nèi)存管理機(jī)制——Pymalloc:
Python中的內(nèi)存管理機(jī)制都有兩套實(shí)現(xiàn),一套是針對(duì)小對(duì)象,就是大小小于256bits時(shí),pymalloc會(huì)在內(nèi)存池中申請(qǐng)內(nèi)存空間;當(dāng)大于256bits,則會(huì)直接執(zhí)行new/malloc的行為來(lái)申請(qǐng)內(nèi)存空間。
關(guān)于釋放內(nèi)存方面,當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)變?yōu)?時(shí),Python就會(huì)調(diào)用它的析構(gòu)函數(shù)。在析構(gòu)時(shí),也采用了內(nèi)存池機(jī)制,從內(nèi)存池來(lái)的內(nèi)存會(huì)被歸還到內(nèi)存池中,以避免頻繁地釋放動(dòng)作。