python3内存管理机制

it2022-12-27  80

文章目录

1、垃圾回收1.2 手动回收1.2 自动回收 2、引用计数3、内存池

1、垃圾回收

1.2 手动回收

调用gc模块

import gc del 变量名 gc.collect()

1.2 自动回收

1、当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。

2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。

2、引用计数

将10赋值给变量a,实际上是a是10的引用,10的引用计数加1,又将a赋值给变量b,就是b是a的引用,10的引用计数加1

引用计数增加 1.对象被创建:x=4 2.另外的别人被创建:y=x 3.被作为参数传递给函数:foo(x) 4.作为容器对象的一个元素:a=[1,x,‘33’]

引用计数减少 1.一个本地引用离开了它的作用域。比如上面的foo(x)函数结束时,x指向的对象引用减1。 2.对象的别名被显式的销毁:del x ;或者del y 3.对象的一个别名被赋值给其他对象:x=789 4.对象从一个窗口对象中移除:myList.remove(x) 5.窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域。

3、内存池

       内存池的概念就是预先在内存中申请一定数量的,大小相等的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存。这样做最显著的优势就是能够减少内存碎片,提升效率。

Python中的内存管理机制——Pymalloc: python中的内存管理机制都有两套实现 1、一套是针对小对象,就是大小小于256kb时,会使用内存池;

2、一套是当大于256kb,则会直接执行 new/malloc 的行为来申请新的内存空间。

如果对象创建是从内存池申请的内存,回收时也释放回内存池。

总结: python种引入内存池来管理小内存,对于比较大的对象,则采用引用计数方式管理,当计数为0时,回收释放内存

最新回复(0)