python笔记

内存管理机制

2020-10-14  本文已影响0人  h小吴y

赋值语句分析内存

使用id()方法访问内存地址

对于比较小的int数据,内存地址不变,反之超过一定范围就会改变


思考下面代码的输出结果

一般会认为输出结果为: [11], [678], ['666']

其实结果如下:


垃圾回收机制

以引用计数为主,分代收集为辅

如果一个对象的引用数为0,python虚拟机就会回收这个对象的内存

引用计数的缺陷是循环引用的问题


引用计数(reference count)

每个对象都有存有指向该对象的引用总数

查看某个对象的引用计数

        sys.getrefcount()

可以使用del关键字删除某个引用


垃圾回收

满足特定条件,自动启动垃圾回收

当python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数

当两者的差值高于某个阈值时,垃圾回收才会启动

查看阈值gc.get_threshold()


分代回收

python将所有的对象分为0,1,2三代

所有新建对象都是0代对象

当某一代对象经历过垃圾回收,依旧存活,那么它就被归入下一代对象


内存池(memory pool)机制

当创建大量消耗小内存的对象时,频繁调用new/mallc会导致大量的内存碎片,致使效率降低。

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

python3中的内存管理机制------pymalloc

    针对小对象(<=512B),pymalloc会在内存池中申请内存空间

    当>512B,则会PyMem_RawMalloc()和PyMem_RawRealloc()来申请新的内存空间

上一篇下一篇

猜你喜欢

热点阅读