垃圾回收机制
垃圾回收
在程序执行过程中,变量绑定和引用以积极各种内存操作,使用过后不在使用,如果不清理就会产生垃圾数据,占用大量内存,导致计算机不能正常运行,有一些语言 内存空间的申请和释放都需要程序自己写代码才可以完成,python 为了方便程序员使用,内部集成了一套垃圾回收程序。
引用回收
-
在程序中变量每绑定一个数据值,他的内部,就有一个引用就加一,如果解除数据绑定引用就减1,直到0,就被回收
name1 = '张三' # 引用为1 name2 = name1 # 引用为2 age = 18 # 引用为1 del # 解除绑定 del age # 引用为0被回收
标记回收
-
在程序中可能会出现,两个列表或元组或其他可以嵌套的数据类型,在解除与变量名的帮定后内存地址里面出现循环即引用一直唯一我们也不使用为垃圾数据的引用的情况
num1 = [1,2,3,4,5] # 引用为1 num2 = [111,222,333,444] #引用为 1 # append()的函数使用了像列表末尾增加元素的 num1.append(num2) # 此时列表就变成了[1,2,3,4,5,[111,222,333,444]]引用为2 num2.append(num1) # 此时列表就变成了[111, 222, 333, 444, [1, 2, 3, 4, 5, [...]]] 引用为2 del num1 # 引用为1 del num2 # 引用为1 当内存占用达到临界值的时候 程序会自动停止 然后扫描程序中的所有的数据 并给只产生循环引用的数据打上标记之后一次性清除
这个时候我们用不到,程序也不回收也会产生垃圾,这个时候就需要,引用回收,来解决内存占用过大
分代回收
垃圾回收每过1分钟就会遍历一遍内存,查看是否有需要回收的,如果一直长时间频繁的遍历也会导致内存暴涨影响程序,是因为,垃圾回收也是一套程序。此时标记回收就突出他的优势