python 通过三种机制实现内存管理: 引用计数机制、垃圾回收机制、内存池机制
- 引用计数:引用在python中是一种关系,也是指针指向某块内存空间的关系,python内部使用引用计数,当对象被创建或将对象放入一个容器中,该对象的引用计数都会+1,当使用del进行对象销毁时或被重新赋值时,该对象的引用计数会减少。可以使用sys.getrefcount()获取对象当前的引用计数
- 垃圾回收:垃圾收集器会回收内存中不再使用的部分,其包含:1.引用计数为0的对象,清除其在内存的空间;2.当两个对象相互引用时,其本身其它的引用为0,此时循环垃圾回收器会释放循环引用对象 【补充知识:python将内存根据对象存活时间划分为不同集合:年轻代、中年代、老年代,每一代对应一个链表,新创建的对象分配在年轻代,年轻代链表总数达到上限后,python垃圾回收机制被触发,将可被回收的对象回收,而不会被回收的对象会被移到中年代,依次类推,老年代中的对象是存活时间最久的对象,甚至存货于整个系统的生命周期内】
- 内存池机制:内存池即预先在内存中申请一定数量大小相等的内存作为备用,当出现新的内存需求时会先从内存池中进行内存分配,若不构分配再申请新的内存,(源码中使用pymalloc实现,其对于小的对象(小于256字节)会在内存池中申请空间,对于大的对象则直接调用new/malloc申请新的内存空间),这样做的优点在于:1.减少内存碎片,提升效率(创建大量消耗小内存对象时频繁调用的new/malloc会导致大量的内存碎片);2.不用频繁的在用户态和和核心态进行切换(python在运行期间执行的malloc和free是在核心态执行的)。python对内存的垃圾回收机制将不使用的内存放到内存池而不是返回给 *** 作系统
ref:
Python是如何进行内存管理的 - 知乎 (zhihu.com)
剖析 Python 面试知识点(二)- 内存管理和垃圾回收机制 - 云+社区 - 腾讯云 (tencent.com)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)