zoukankan      html  css  js  c++  java
  • 内存回收方式

    三种方式:垃圾回收、分代回收、孤立引用环

    垃圾回收(引用计数):

    Python解释器对正在使用的对象保持计数。当对象不再引用指向的时候,垃圾收集器可以释放该对象,获取分配的内存。

    当分配对象和取消分配对象的差值高于阈值时垃圾回收才会被启动。

    通过gc模块的get_threshold()方法,查看该阈值

    Import gc

    Print(gc.get_threshold())   (700,10,10)700是垃圾回收的阈值 后面两个数是和分代回收相关的阈值

    手动启动垃圾回收:

       Gc.collect()

    分代回收:

    Python将所有的对象分为0 1 2三代,所有的新建对象都是0代,当某一对象经过垃圾回收,依然存活,那么就归为下一代对象,垃圾回收启动时,一定会扫描0代对象。如果0代经过一定次数的垃圾回收,那么就启动对0代和1代的扫描清理。当一代也进行了一定次数的垃圾回收后,那么会启动对0 1 2 代对所有对象的扫描

    这两个此数就是上面get_threshold()返回的两个10,也就是说,每10次0代垃圾回收,配合1次1代垃圾的回收,每10次1代垃圾的回收配合1次2代垃圾回收

    调整分代回收

    同样可以用set_threshold()来调整,比如2代对象进行更频繁的扫描

      Gc.set_threshold(700,10,5)

    孤立引用环:

    对象互相引用彼此,构成引用环

    删除引用之后,这两个对象不可能从程序中调用,就没什么用处了,但因为有引用环的存在,两个对象的引用计数并没有变为0,不会被垃圾回收。

    为了回收这样的引用环,python复制每个对象的引用计数,可以记为gc_ref,当gc_ref不为0的对象和对象的引用对象,需要保留,其他对象则被垃圾回收。

  • 相关阅读:
    IDEA快捷方式
    JVM调优总结
    log4g详细配置
    大前端完整学习路线(详解)
    Tomcat工作原理
    Oracle
    Servlet知识
    lmap
    常见博客API
    PL/SQL入门理解(一)
  • 原文地址:https://www.cnblogs.com/shijia-listen/p/10540948.html
Copyright © 2011-2022 走看看