垃圾回收

python中的垃圾回收

  1.   引用计数
    1. 查看引用数量
      1. import sys
      2. sys.getrefcount()
    2. 优点:简单直观  实时性计数为0则回收
    3. 缺点:维护引用计数消耗一定资源
      1. 当发生循环引用时不能回收 引起内存泄漏
  2.   标记清除
    1. 辅助 解决循环问题(针对可能产生内部循环引用的对象进行的检测机制)
    2. python中的基本不可变类型如 int  string 等对象的内部不会内聚其他对象的引用所以不会产生循环,一般情况下循环引用往往发生在其他可变对象的内部属性中, list dict  class    标记清楚十分消耗内存
    3. 引用计数删除对象-1
    4. 为0放入死亡容器  否则放入存活容器
    5. 遍历存活容器 如果存活容器引用了死亡容器的对象则将死亡容器的对象移入存活容器中
    6. 回收没有被引用的 死亡容器的对象
  3.   分代回收
    1. 产生新的对象为0代
    2. 每经过一次标记清除 代数+1
    3. 代数越高执行标记清楚的频率越低
    4. 0代中 垃圾回收机制执行行为最为密集 其次时1代,2代  。。。
    5. 弱代假说: 程序中年轻的对象往往死的更快,年老的对象往往存活的更久

 

你可能感兴趣的:(垃圾回收)