码迷,mamicode.com
首页 > 编程语言 > 详细

python内存管理机制

时间:2020-04-02 16:05:33      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:python   ali   pytho   object   管理   com   cti   导入   新建   

python的内存管理管理机制: 引入计数,垃圾回收和内存池机制

首先明确  变量和对象  概念

技术图片

 

 

 1. 变量,通过变量指针引用对象,变量指针指向具体对象的内存空间,取对象的值

2. 对象,类型已知,每个对象都包含一个头部信息(类型标识符和引用计数器)

第一、 引用计数

(1)一个对象会记录着引用自己的对象的个数,每增加一个引用,个数加一,每减少一个引用,个数减一
(2)查看引用对象个数的方法:导入sys模块,使用模块中的getrefcount(对象)方法,由于这里也是一个引用,故输出的结果多1
(3)增加引用个数的情况:1.对象被创建p = Person(),增加1;2.对象被引用p1 = p,增加1;3.对象被当作参数传入函数func(object),增加2,原因是函数中有两个属性在引用该对象;4.对象存储到容器对象中l = [p],增加1
(4)减少引用个数的情况:1.对象的别名被销毁del p,减少1;2.对象的别名被赋予其他对象,减少1;3.对象离开自己的作用域,如getrefcount(对象)方法,每次用完后,其对对象的那个引用就会被销毁,减少1;4.对象从容器对象中删除,或者容器对象被销毁,减少1
例如:
技术图片

 

 

第二、垃圾回收

当python中的对象越来越多,占据越来越大的内存,启动垃圾回收(garbage collection),将没用的而对象清除。

原理

当python中某个对象的引用计数将为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾。

注意

1、垃圾回收时,Python不能进行其它的任务,频繁的垃圾回收将大大降低Python的工作效率;

2、Python只会在特定条件下,自动启动垃圾回收(垃圾对象少就没必要回收)

3、当Python运行时,会记录其中分配对象(object allocation)和取消分配对象(object deallocation)的次数。当两者的差值高于某个阈值时,垃圾回收才会启动。

分代回收

       Python将所有的对象分为0,1,2三代;

  所有的新建对象都是0代对象;

  当某一代对象经历过垃圾回收,依然存活,就被归入下一代对象。

第三、内存池机制

Python中有分为大内存和小内存:(256K为界限分大小内存)

1、大内存使用malloc进行分配

2、小内存使用内存池进行分配

3、Python的内存池(金字塔)

python内存管理机制

标签:python   ali   pytho   object   管理   com   cti   导入   新建   

原文地址:https://www.cnblogs.com/ivyharding/p/12619922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!