python手动垃圾回收_python中的垃圾回收机制

简介:

相信大家对C语言都不陌生,但是C语言有个很让人烦心的事,就是需要程序员手动的去管理内存。如果写一个项目,不小心忘记关闭申请的内存了,那么将会导致内存泄漏,程序死机。于是一些高级语言就诞生了。本文主要是介绍下python运行时中的垃圾回收机制,仅个人心得,欢迎大家讨论。

内容:

在python中,python运行时是如何解决内存泄漏(垃圾回收)呢?

1.引用计数

classPerson(object):def __init__(self):passp=Person()

我们看这段代码,当执行到 p=Person() 时,python运行时自动帮我们申请了一块内存。而当程序结束时,python会自动释放这块内存。这个过程中,python的具体实现:

ea39f9511f56977d0a180d57186437e2.png

当程序结束,python运行时会扫描内存,001号内存的引用数如果为0,那么python运行时会把这块内存释放掉。

2. 隔代回收

python运行时中的引用计数能解决大部分的内存问题,当如果遇到内存相互引用时,例如:

class Person(object):

def __init__(self):

pass

class School(object):

def __init__(self):

pass

p=Person()

s=School()

p.Sch=s

s.Per=p

f80027d2ea9bf5de2497eff9b708cbc6.png

在这段代码中,p(001)内存中的Sch变量又指向s(002内存)。s(002)内存中的Per变量又指向p(001内存)。在相互引用下,001内存和002内存的引用计数都为:2。

当这段代码结束时,p和s都销毁了,但是001和002内存的引用 计数还是为1,那么引用计数的方式就难以实现内存释放了。如果是有8、9个变量相互引用呢

这时,隔代回收机制就由此而来。隔代回收机制。

1. 先找出所有有循环引用的内存。

2. 每隔一段时间,将所有循环引用的内存的引用计数-1

b15cee9af6a8b7e401ecf89c68b55c88.png

当程序结束后,会自动回收p和s这两个变量地址。然后加上每隔一段时间回收循环引用的地址,这样就能解决循环引用的问题了。当然,如果是两个内存中多个变量的循环应用,我猜想,如果是我,我会先扫描每块内存中的变量,然后去重复的地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值