加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python垃圾回收机制

发布时间:2020-12-20 10:17:00 所属栏目:Python 来源:网络整理
导读:垃圾回收机制 # 不能被程序访问到的数据,就称之为垃圾 引用计数 # 引用计数是用来记录值的内存地址被记录的次数的 ? # 每一次对值地址的引用都可以使该值的引用计数 +1 # 每一次对值地址的释放都可以使该值得引用计数 -1 ? # 当一个值的引用计数为0时,该值

垃圾回收机制


# 不能被程序访问到的数据,就称之为垃圾

引用计数

# 引用计数是用来记录值的内存地址被记录的次数的
?
# 每一次对值地址的引用都可以使该值的引用计数 +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需要扫描的变量的总个数就变少了
,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫
描的频率越低
‘‘‘
?
# 回收:依然是使用引用计数作为回收的依据

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读