python是基于什么的内存管理方式_为什么说Python采用的是基于值的内存管理模式...
內存管理架構:
1.python的內存管理機制由兩部分組成,其由PYMALLOC_DEBUG控制,在debug模式下的內存管理機制和正常模式下的內存管理模式。
2.python的內存管理機制可以抽象成一種層次結構:
最底層:操作系統提供的內存管理接口,由其實現并維護
第一層:對最底層的包裝,為python提供統一的原生內存管理接口和面向python中類型的內存分配器。簡單地說,C語言中的malloc是需要用戶自行提供申請空間的大小,而python可以由類型和數量自行判斷內存空間大小
第二層:提供創建python對象的接口
第三層:為常用對象提供更抽象的內存管理策略,如整數,字符串,主要是對象緩存池機制 小塊空間的內存池
1.python的內存池機制,用于小塊內存的申請和釋放,同樣也有四層層次結構組成,分別是block,pool,arena和內存池。
第一層block:確定大小的內存塊,大小有相應的劃分且有上限
第二層pool:一組block的集合叫pool,最重要的pool_header和freeblock鏈表
第三層arena:一組pool的集合,分已使用和未使用兩種狀態
第四層內存池:Python中當申請內存超過某個值就啟動malloc行為,當低于這個值才進行內存池申請內存,根據申請內存的大小獲得對應的序號,如果已使用的pool中有可用的pool,則用其分配block,否則從已用arena中獲取pool,否則申請arena,成功獲取后開始初始化 循環引用的垃圾收集
1.python中的垃圾回收是基于對象的引用計數實現的,也就是說對象的生命周期是由對象的引用計數管理的。同時帶來效率的降低,所以引入內存池機制,使得常用對象能更高效
2.引用計數機制致命缺點是在循環引用下容易引起內存泄漏,為了克服循環引用帶來的問題,引入了其他垃圾回收機制,也就是主流垃圾收集技術中的標記(清除和分代收集技術)
3.三色標記模型,也就是標記--清除技術,步驟如下:
先找到根對象然后遍歷搜索,能到達的不可刪除,不能到達的可能刪除
4.垃圾收集機制針對循環引用的出現,PyIntObject,PyStringObject是不會出現引用的,只有container對象才會出現引用,所以補充的垃圾回收機制是對容器類型對象創建收集鏈表,清除鏈表中循環引用的對象
5.分化收集技術是java采用的垃圾回收機制,就是將內存根據生命周期長短進行內存分化制,python將內存分成三個化,有一個化滿了就將其他化連接到其后進行垃圾回收
6.需要注意的是對類對象的回收,在類中創建del方法容易引起無法回收的情況
總結
以上是生活随笔為你收集整理的python是基于什么的内存管理方式_为什么说Python采用的是基于值的内存管理模式...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画决策树_Python绘制决
- 下一篇: 用Python构建和可视化决策树