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行为来申请内存空间。