内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执行效率,因为在Python的运行中,会创建和销毁大量的对象,这些都涉及到内存的管理。
内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执行效率,因为在Python的运行中,会创建和销毁大量的对象,这些都涉及到内存的管理。
51CTO推荐阅读:对Python特色的详细介绍
小块空间的内存池
在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。
Python内存池全景
这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。这也就是之前提到的Pymalloc机制。
在Python 2.5中,Python内部默认的小块内存与大块内存的分界点定在256个字节,这个分界点由前面我们看到的名为SMALL_REQUEST_THRESHOLD的符号控制。
也就是说,当申请的内存小于256字节时,PyObject_Malloc会在内存池中申请内存;当申请的内存大于256字节时,PyObject_Malloc的行为将蜕化为malloc的行为。当然,通过修改Python源代码,我们可以改变这个默认值,从而改变Python的默认内存管理行为。
在一个对象的引用计数减为0时,与该对象对应的析构函数就会被调用。
但是要特别注意的是,调用析构函数并不意味着最终一定会调用free释放内存空间,如果真是这样的话,那频繁地申请、释放内存空间会使 Python的执行效率大打折扣(更何况Python已经多年背负了人们对其执行效率的不满)。一般来说,Python中大量采用了内存对象池的技术,使用这种技术可以避免频繁地申请和释放内存空间。因此在析构时,通常都是将对象占用的空间归还到内存池中。
"这个问题就是:Python的arena从来不释放pool。这个问题为什么会引起类似于内存泄漏的现象呢。考虑这样一种情形,申请10*1024*1024个16字节的小内存,这就意味着必须使用160M的内存,由于Python没有默认将前面提到的限制内存池的WITH_MEMORY_LIMITS编译符号打开,所以Python会完全使用arena来满足你的需求,这都没有问题,关键的问题在于过了一段时间,你将所有这些16字节的内存都释放了,这些内存都回到arena的控制中,似乎没有问题。
但是问题恰恰就在这时出现了。因为arena始终不会释放它维护的pool集合,所以这160M的内存始终被Python占用,如果以后程序运行中再也不需要160M如此巨大的内存,这点内存岂不是就浪费了?"
Python内存管理规则:del的时候,把list的元素释放掉,把管理元素的大对象回收到py对象缓冲池里。
相关推荐
内存管理,对于python这样的动态语言来说,是至关重要的一部分。它很大程度上决定了python的执行效率,对象的创建销毁,都涉及到内存的管理
主要介绍了python内存管理机制原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
⼩整数对象池 intern机制 垃圾回收(引⽤计数、标记清除、分代回收)
Python 打算删除大量涉及像C和C++语言那样的复杂内存管理。当对象离开范围,就会被自动垃圾收集器回收。然而,对于由 Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情。 在这篇博客中,我将会分享...
主要介绍了python内存管理和垃圾回收机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Python垃圾回收机制:主要介绍了计数引用,标记清除,分代回收等概念,测试代码,测试结果。用于技术学习,技术分享
Python-内存管理与回收机制的简单总结
对内存管理机制,c语言和Python的内存管理机制是不一样的! c语言: 我们在写c语言时,可以通过指令直接访问内存,...下面通过几行代码详细介绍一下Python内存管理机制: 先定义一个列表x,每引用一次,引用次数加1 im
Development tool to measure, monitor and analyze the memory behavior of Python objects in a running Python application.
主要介绍了Python内存泄漏和内存溢出的解决方案,帮助大家维护后台进程,感兴趣的朋友可以了解下
Python3进程内存分析器-用于运行python进程的内存分析器.zip memory_analyzer 运行内存分析器不需要您停止进程或添加任何特殊的调试代码或标志。尽管内存分析器收集有关内存中对象的信息时您的过程(及其所有线程...
python面试常见问题1、“==”与is的区别2、list与tuple的区别3、python中list...python内存管理机制、内存泄漏12、深拷贝/浅拷贝区别13、GIL全局解释器锁14、python2和python3的区别15、提高python运行效率的方法16、类...
Python订单管理系统源码.zip
python的License授权机制(csdn)————程序
主要介绍了简单了解python的内存管理机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Python文件:python来查看Linux系统内存使用情况.py Python文件:python来查看Linux系统内存使用情况.py
主要介绍了python内存管理,较为详细的分析了Python的内存管理机制,需要的朋友可以参考下
解读Python selenium的等待方式