当前位置: 首页 > 后端技术 > Python

大话 Python:python 进阶提升 -- 如何理解垃圾回收机制及应用

时间:2023-03-25 22:45:09 Python

谈谈Python:Python进阶提升——如何理解垃圾回收机制及其应用不需要像C语言那样自己管理内存。合理使用垃圾回收机制,不仅可以避免内存溢出等不必要的错误,还可以适当提高程序的性能。1、Python的内存管理机制是什么?Python中主要有三种内存管理机制,一是引用计数,二是垃圾回收,三是内存池。这三种机制相互补充,共同完成程序在运行过程中的内存管理。引用计数:简单的说,引用计数是一种内存管理方式,效率很高。所谓引用计数,就是对象在被引用的时候就被计数了。被引用时,计数结果加1,不被引用。这种计数方式表示当计数结果为0时,该对象没有被使用。因此,如果计数结果为0,则可以对该对象进行delete操作,以节省内存。循环引用是不能回收的,即在自己的属性中引用了自己对象的对象是不能回收的,因为引用计数永远不可能为零。垃圾收集:引用计数也属于垃圾收集机制的范畴。此外,还有两种垃圾回收机制:分代回收和标记清除。内存池:内存池管理机制也称为Pymalloc机制,主要用于管理碎片内存的申请和释放。比如在进行引用计数的时候,Python对象被频繁引用和不被引用,这样引用计数结果为0的频率就非常高,这样频繁的操作肯定会降低程序执行的效率。所以内存管理机制主要是为了解决这个问题。只有从内存池申请的内存才能归还给内存池,相当于管理员的角色。分代回收:分代回收是一种典型的以空间换取时间的技术模型。分代就是把程序中的对象分成三代。老年代是创建时间最长的一代,也是最不容易被清理的一代。原来二代的创作时间比一代短,比三代的创作时间长。最后一个是第三代,创建时间最短,最有可能被回收。当第一代存储的对象数量达到一定数量时,第三代存储的所有对象将被清除。当二代达到一定等级时,二代和三代的对象就会被清除。当第三代达到一定级别时,自身存储的所有对象都会被清除。目的。标记和清除:标记其实可以理解为通过标记检测垃圾对象,清除就是清理掉标记过滤掉的垃圾对象。首先统一标记除根节点以外的所有对象,然后标记引用的对象。这样就筛选出垃圾对象,最后清理掉垃圾对象。2.如何使用python的扩展库来管理垃圾回收?Python提供了gc的扩展库作为垃圾回收机制,可以解决引用计数中循环引用无法回收的问题。一般来说,如果要主动收集垃圾,只需要导入gc扩展库,调用垃圾收集函数即可完成垃圾收集。在合适的地方手动触发垃圾回收和回收1#导入gc模块2importgc3#在需要回收垃圾的地方调用垃圾回收4gc.collect()开启、关闭、检测垃圾回收机制1#导入gc模块2importgc3#开启垃圾回收机制4gc.enable()5#关闭垃圾回收机制6gc.disable()7#检测垃圾回收机制是否开启8gc.isenabled()获取并设置自动回收的阈值1#导入gc模块2importgc3#获取垃圾对象的自动回收阈值4gc.get_threshold()5#设置垃圾对象自动回收的阈值6gc.set_threshold(1000,15,5)阈值:对应第一,第二,最大对象数而第三代,一般来说,适当提高阈值可以提高程序的执行效率。更多精彩,上微信公众号【蟒蛇集中营】,关注获取《python 从入门到精通全套视频》