程序员

垃圾回收机制,引用计数

2018-05-11  本文已影响0人  初幕

当引⽤计数为0时,该对象⽣命就结束了。

计数机制的优点:

1、简单

2、实时性:⼀旦没有引⽤,内存就直接释放了。不⽤像其他机制等到特定时机。实时性还带来⼀个好处:处理回收内存的时间分摊到了平时。

计数机制的缺点:

1、维护引⽤计数

2、消耗资源循环引⽤

list1    =   []

list2    =   []

list1.append(list2)

list2.append(list1)

list1与list2相互引⽤,如果不存在其他对象对他们的引用,list1与list2的引用计数也仍然1,所占⽤的内存永远无法被回收,这将是致命的。 对于如今的强⼤硬件,缺点1尚可接受,但是循环引⽤导致内存泄露,注定python还将引⼊新的回收机制。(分代收集)

.垃圾回收机制

Python中的垃圾回收是以引用计数为主,分代收集为辅。

1、导致引用计数+1的情况

对象被创建,例如a=23      

 对象被引⽤,例如b=a   

对象被作为参数,传⼊到⼀个函数中,例如func(a)       

对象作为⼀个元素,存储在容器中,例如list1=[a,a]   

2、导致引用计数-1的情况

对象的别名被显式销毁,例如del    a      

 对象的别名被赋予新的对象,例如a=24   

⼀个对象离开它的作⽤域,例如f函数执⾏完毕时,func函数中的局部变量(全局变量不会)   

对象所在的容器被销毁,或从容器中删除对象   

3、查看一个对象的引用计数

import    sys

a    = "hello    world"

 sys.getrefcount(a)

可以查看a对象的引用计数,但是⽐正常计数⼤1,因为调⽤函数的时候传入a,这会让a的引用计数+1

4.有三种情况会触发垃圾回收:

当gc模块的计数器达到阀值的时候,自动回收垃圾

调⽤gc.collect(),手动回收垃圾

程序退出的时候,python解释器来回收垃圾

上一篇下一篇

猜你喜欢

热点阅读