其他分享
首页 > 其他分享> > 01 垃圾回收机制

01 垃圾回收机制

作者:互联网

01 垃圾回收机制

一、什么是垃圾回收机制?

二、为什么要有垃圾回收机制?

三、垃圾回收机制原理分析

1、什么是引用计数?

1.1 直接引用

x = 10  # 值10直接引用:1次
y = x   # 值10直接引用:2次
z = y   # 值10直接引用:3次
print(id(x))    # 140715024107456
print(id(y))    # 140715024107456
print(id(z))    # 140715024107456

1.2 间接引用

c = 10
li = ['a', 'b', c]  # 列表相当于['a', 'b', 10],值10被间接引用:1次
print(id(c))         # 140715024107456
print(id(li[-1]))   # 140715024107456, 值10被间接引用:2次


dic = {'key': c}        # 值10被间接引用:3次
print(id(dic['key']))   # 140715024107456, 值10被间接引用:4次

1.3 由引用关系刨析列表取值的底层原理过程

1.4 总结

2、引用计数扩展阅读

2.1 标记清除

li1 = [10]
li2 = [20]
li1.append(li2)  # li1 = [值10对应得内存地址, 列表2对应得内存地址],此时列表li1得引用计数为2
li2.append(li1)  # li2 = [值20对应得内存地址,列表1对应额内存地址],此时列表li2得引用计数为2

del li1
del li2
# 通过del解除变量名li1与值[10]得绑定关系,变量名li2与值[20]的绑定关系,虽然解绑了直接引用,此时li1与li2得间接引用关系没有断,任然互相关联着,也就是说li1与li2值当前引用计数为1,但是它们并不能被访问到了,这就导致了它们一直占用了这块内存空间,这对于计算机来说是致命得。

# 总结:循环引用时,值不再被任何名字关联,但是值的引用计数并不会为0,因该被回收,但不能被回收。

总结

2.2 分代回收

总结

标签:10,01,回收,列表,li1,垃圾,内存地址,引用
来源: https://www.cnblogs.com/yang1333/p/12421112.html