首页 > 编程语言 > 详细

python中的垃圾回收机制

时间:2020-12-22 19:52:07      阅读:37      评论:0      收藏:0      [点我收藏+]

简介:

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

内容:

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

  1.引用计数

class Person(object):
    def __init__(self):
        pass
p=Person()

 

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

    技术分享图片

    当程序结束,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

 

    技术分享图片

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

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

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

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

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

技术分享图片

    这样就能解决循环引用的问题了。当然,如果是两个内存中多个变量的循环应用,我猜想,如果是我,我会先扫描每块内存中的变量,然后去重复。

 

python中的垃圾回收机制

原文:https://www.cnblogs.com/norain/p/14174581.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!