美文网首页
垃圾回收 GC

垃圾回收 GC

作者: 午字横 | 来源:发表于2023-05-01 13:22 被阅读0次
    1:小整数对象池

    整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。
    Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,所有位于这个范围内的整数使用的都是同一个对象.
    同理,单个字母也是这样的。
    但是当定义2个相同的字符串时,引用计数为0,触发垃圾回收

    2:大整数对象池

    每一个大整数,均创建一个新的对象。


    image.png
    3:intern机制(字符串驻留)
    a1 = "HelloWorld"
    a2 = "HelloWorld"
    a3 = "HelloWorld"
    a4 = "HelloWorld"
    a5 = "HelloWorld"
    a6 = "HelloWorld"
    a7 = "HelloWorld"
    a8 = "HelloWorld"
    a9 = "HelloWorld"
    
    

    python会不会创建9个对象呢?在内存中会不会开辟9个”HelloWorld”的内存空间呢? 想一下,如果是这样的话,我们写10000个对象,比如a1=”HelloWorld”…..a1000=”HelloWorld”, 那他岂不是开辟了1000个”HelloWorld”所占的内存空间了呢?如果真这样,内存不就爆了吗?所以python中有这样一个机制——intern机制,让他只占用一个”HelloWorld”所占的内存空间。靠引用计数去维护何时释放。


    image.png
    总结
    • 小整数[-5,256]共用对象,常驻内存

    • 大整数不共用内存,引用计数为0,销毁

    • 单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁

    注意:以上范围在pycharm中运行会有所不同,跟系统无关

    GC Garbage collection

    python采用的是引用计数机制为主,分代收集机制为辅的策略
    当引用计数为0时,该对象生命就结束了。

    引用计数机制的优点

    • 简单
    • 实时性:一旦没有引用,内存就直接释放了。不用像其他机制等到特定时机。实时性还带来一个好处:处理回收内存的时间分摊到了平时。

    引用计数机制的缺点:

    • 维护引用计数消耗资源

    • 循环引用

      list1 = []
      list2 = []
      list1.append(list2)
      list2.append(list1)
      

    list1与list2相互引用,如果不存在其他对象对它们的引用,list1与list2的引用计数也仍然为1,所占用的内存永远无法被回收,这将是致命的。 对于如今的强大硬件,缺点1尚可接受,但是循环引用导致内存泄露,注定python还将引入新的回收机制。(分代收集)

    画说Ruby和Python-中文 | 画说Ruby和Python-原文
    有三种情况会触发垃圾回收:
    1. 当gc模块的计数器达到阈值的时候,自动回收垃圾
    2. 调用gc.collect(),手动回收垃圾
    3. 程序退出的时候,python解释器来回收垃圾
    class ClassA():
        def __init__(self):
            print('object born,id:%s'%str(id(self)))
    
    def f2():
        while True:
            c1 = ClassA()
            c2 = ClassA()
            c1.t = c2
            c2.t = c1
            del c1
            del c2
            gc.collect()#手动调用垃圾回收功能,这样在自动垃圾回收被关闭的情况下,也会进行回收
    
    #python默认是开启垃圾回收的,可以通过下面代码来将其关闭
    gc.disable()
    
    f2()
    
    
    截图 2023-05-01 17-09-19.png

    2023-05-01

    相关文章

      网友评论

          本文标题:垃圾回收 GC

          本文链接:https://www.haomeiwen.com/subject/tqunjdtx.html