Python是如何进行内存管理的?
答:从三个方面来说,一是对象的引用计数机制,二是垃圾回收机制,三是内存池机制。
一、对象的引用计数机制
Python 在内部使用引用计数来跟踪内存中的对象,所有对象都有引用计数。
引用计数增加的情况:
1,一个对象分配一个新名称
2,将其放入一个容器中(如列表、元组或字典)
引用计数减少的情况:
1,使用del语句对对象别名显示的销毁
2,引用超出作用域或被重新赋值
Sys.getrefcount( )函数可以获得对象的当前引用计数
在大多数情况下,引用计数比你想象的要大得多。对于数字和字符串等不可变数据,解释器会在程序的不同部分之间共享内存以节省内存。
二、垃圾回收
1. 当一个对象的引用计数为零时,它将被垃圾回收机制处理掉。
2、当两个对象a和b互相引用时,del语句可以减少a和b的引用计数,并破坏用来引用底层对象的名字。但是,由于每个对象都包含对其他对象的引用,因此引用计数不会清零,对象也不会被销毁。 (从而导致内存泄漏)。为了解决这个问题,解释器周期性地执行一个循环检测器来搜索不可达对象的循环并将它们移除。
三、内存池机制
Python为内存提供了垃圾回收机制,但它会将未使用的内存放入内存池,而不是归还给操作系统。
1.Pymalloc机制。为了加快Python的执行效率,Python引入了内存池机制来管理小块内存的申请和释放。
2、Python中所有小于256字节的对象都使用pymalloc实现的allocator,而大对象则使用系统的malloc。
3.对于Python对象,比如整数、浮点数、Lists,它们都有自己私有的内存池,对象之间不共享自己的内存池。也就是说,如果你分配和释放了大量的整数,那么用来缓存这些整数的内存就不能再分配给浮点数了。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python生成器调用方法抛出异常11/05
- ♥ Python中美丽星空代码详解!08/25
- ♥ 如何计算python集合的差异08/24
- ♥ python希尔排序的使用原理01/04
- ♥ python成员方法有什么区别12/27
- ♥ python如何删除文本中的换行符11/18
内容反馈