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