一、什么是垃圾回收机制?
二、为什么要用垃圾回收机制
三、理解GC原理需要储备的知识
3.1、堆区与栈区
在定义变量时,变量名与变量值都是需要存储的,分别对应内存中的两块区域:堆区与栈区。
3.2 直接引用与间接引用
四、垃圾回收机制原理分析
Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过“分代回收”(generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。
4.1.什么是引用计数?
如:age=18
用来清除直接引用垃圾
# 直接引用
x = 10 # 10的引用计数为1
y = x # 10的引用计数为2
z = y # 10的引用计数为3
print(id(x))
print(id(y))
print(id(z))
直接引用
间接引用
x = 10 # 10的引用计数为1
列表中存的是值的内存地址
l = [x, ‘a‘] # 10的引用计数为2
print(id(l[0]))
间接引用
引用计数扩展阅读
4.2.标记-清除
用来清理循环引用情况下引用计数无法清除的垃圾
# 循环引用
l1 = [111, ]
l2 = [222, ]
l1.append(l2) # l1=[值111的内存地址, l2列表的内存地址]
l2.append(l1) # l1=[值222的内存地址, l1列表的内存地址]
print(id(li[1]))
print(id(l2))
print(id(l2[1]))
print(id(l1))
print(l2)
print(l1[1])
del l1 # 列表1的引用计数减1,列表1的引用计数变为1
del l2 # 列表2的引用计数减1,列表2的引用计数变为1
4.3.分代回收
原文:https://www.cnblogs.com/qujiu/p/12423755.html