BAT面试问题28:28:Python如何管理内存?
Python内存管理,一般从以下三个方面进行:
1)引用计数机制(四增五减)
2)垃圾回收机制(手动和自动,分代回收)
3)内存池机制(大M小P)
1)对象的引用计数机制
为了跟踪内存中的对象,Python使用了简单的引用计数技术。Sys.getrefcount(a)可以检查对象A的引用计数,但比正常计数高1,因为调用函数时传入了A,会使A的引用计数+1。
2)垃圾收集机制
吃多了总会胖,蟒蛇也是。当Python中的对象越来越多的时候,会占用越来越多的内存。但是你不用太担心Python的大小。它会“减肥”,在适当的时候开始垃圾收集。
集合),清除无用的对象。
从根本上说,当Python中一个对象的引用计数下降到0时,就意味着没有对该对象的引用,该对象就变成了要回收的垃圾。
例如,一个新创建的对象被分配给一个引用,该对象的引用计数变为1。如果引用被删除,并且对象的引用计数为0,则该对象可以被垃圾收集。
然而,减肥是一件既费钱又费力的事情。在垃圾收集期间,Python不能执行其他任务。频繁的垃圾收集会大大降低Python的工作效率。如果内存中没有很多对象,就没有必要总是启动垃圾收集。
所以Python只会在特定条件下自动启动垃圾收集。当Python运行时,它记录分配对象(对象
分配)和释放对象的次数。当它们之间的差异高于某个阈值时,垃圾收集将开始。
我们可以通过gc模块的get_threshold()方法来检查阈值。
3)内存池机制
Python分为大内存和小内存:(256K是边界内存)
1,大内存由malloc分配。
2.小内存由内存池分配。
python中有两套内存管理机制。一种是针对小对象,即大小小于256K时,pymalloc会申请内存池中的内存空间。当它大于256K时,将直接执行系统的malloc行为来申请内存空间。