㈠.Python 是如何进行内存管理的?
答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制
⒈对象的引用计数机制
Python 内部使用引用计数, 来保持追踪内存中的对象, 所有对象都有引用计数。
引用计数增加的情况:
❶一个对象分配一个新名称
❷将其放入一个容器中(如列表、 元组或字典)
引用计数减少的情况:
❶使用 del 语句对对象别名显示的销毁
❷引用超出作用域或被重新赋值
sys.getrefcount( )函数可以获得对象的当前引用计数
多数情况下, 引用计数比你猜测得要大得多。 对于不可变数据(如数字和字符串) , 解释器
会在程序的不同部分共享内存, 以便节约内存。
⒉垃圾回收
❶当一个对象的引用计数归零时, 它将被垃圾收集机制处理掉。
❷当两个对象 a 和 b 相互引用时, del 语句可以减少 a 和 b 的引用计数, 并销毁用于引用底
层对象的名称。 然而由于每个对象都包含一个对其他对象的应用,
因此引用计数不会归零, 对象也不会销毁。 (从而导致内存泄露) 。 为解决这一问题, 解释
器会定期执行一个循环检测器, 搜索不可访问对象的循环并删除它们。
⒊内存池机制
Python 提供了对内存的垃圾收集机制, 但是它将不用的内存放到内存池而不是返回给操作系
统。
❶Pymalloc 机制。 为了加速 Python 的执行效率, Python 引入了一个内存池机制, 用于管理
对小块内存的申请和释放。
❷Python 中所有小于 256 个字节的对象都使用 pymalloc 实现的分配器, 而大的对象则使用
系统的 malloc。
❸对于 Python 对象, 如整数, 浮点数和 List, 都有其独立的私有内存池, 对象间不共享他
们的内存池。 也就是说如果你分配又释放了大量的整数, 用于缓存这些整数的内存就不能再
分配给浮点数。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



