垃圾回收机制
# 不能被程序访问到的数据,就称之为垃圾引用计数
# 引用计数是用来记录值的内存地址被记录的次数的 # 每一次对值地址的引用均可以使该值的引用计数 +1 # 每一次对值地址的释放均可以使该值得引用计数 -1 # 当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收循环导入
ls1 = [666] ls2 = [888] ls1.append(ls2) ls2.append(ls1) # 循环导入会致使某些值得引用计数永远大于0标记删除
# 标记:标记的过程其实就是,遍历全部的GC Roots对象(栈区中的全部内容或者线程均可以做为GC Roots对象),而后将全部GC Roots的对象能够直接或间接访问到的对象标记为存活的对象,存放到新的内存空间中 # 删除:删除的过程将遍历堆中全部的对象,将以前全部的内容所有清除分代回收
# 分代:指的是根据存活时间来为变量划分不一样等级(也就是不一样的代) ''' 新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,若是发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc须要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以一样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低 ''' # 回收:依然是使用引用计数做为回收的依据