# 垃圾回收

# 小整数对象池

# a = 100
# python对小整数的定义是[-5,257],这些证书对象是提前创建好的,不会被垃圾回收,再一个python的程序中,所有位于这个范围内的正式使用的都是一个对象

# 大整数对象池
# 每一个大整数,均创建一个新的对象
# >>> A = 1000
# >>> id(A)
# 1797282549648
# >>> B = 1000
# >>> id(B)
# 1797289269392

# intern机制
# >>> a = 'hello'
# >>> b = 'hello'
# >>> id(a)
# 1797289499256
# >>> id(b)
# 1797289499256

# >>> b = 'hello world'
# >>> a = 'hello world'
# >>> id(a)
# 1797289512176
# >>> id(b)
# 1797289512112

# 总结:
# 小整数[-5,257)共用对象,常驻内存
# 单个字符共用对象,常驻内存
# 单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁

# GC垃圾回收(Garbage collection)

# 引用计数机制:
# python里每一个东西都是对象,他们的核心就是一个结构体:PyObject
# typedef struct_object{
# int ob_refcnt
# struct_typeobject *ob_type
# } PyObject
# PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt
# 就会增加,当引用它的对象被删除,他的ob_refcnt就会减少
# 当引用计数为0时,该对象生命就结束了

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

# import gc
# class ClassA():
# def __init__():
# print("object born,id:%s"%str(hex(id(self))))

# def f2():
# while True:
# c1 = ClassA()
# c2 = ClassA()
# c1.t = c2
# c2.t = c1
# del c1
# del c2
# gc.disable()
# f2()

# 话说Ruby与Python垃圾回收

# 隔代回收
# python以引用计数机制为主,隔代收集两种机制为辅的策略

# 0----------------------------------------------- 执行100次 -1 循环使用,引用计数不能为0,看是否循环引用?如果是循环引用就-1

# 1----------------------------------------------- 执行1次

# 2--------------------------------------------

import gc
print(gc.get_count()) #获取当前自动执行垃圾回收的技术器,返回提个长度为3的列表
# (243, 3, 1)
print(gc.get_count())

print(gc.get_threshold()) # 获取的gc模块中自动执行垃圾回收的频率
# (700, 10, 10)

print(gc.set_threshold()) #设置自动执行垃圾回收的频率

# 1.导致引用计数+1的情况
# 1.对象被创建,如a=23
# 2.对象被引用,如b=a
# 3.对象被作为参数,传入一个函数中,例如func(a)
# 4.对象作为一个元素,存储在容器中,list=[a,a]

# 2.导致引用计数-1的情况
# 对象的别名呗显示销毁 列如del a
# 对象的别名被赋予新对象,例如a = 23、
# 一个对象离开他的作用域,如f函数执行完毕时,func函数中的局部变量(全局变量不会)
# 对象所在的容器被销毁,或者从容器中删除对象

# gc模块的自动垃圾回收机制
# 必须要import gc
# gc.enable() 开启
# gc.disabled() 禁用
# gc.isenabled() 是否开启gc
# gc.collect() 收集垃圾(手动清理垃圾)

# gc.garbage() 显示清理垃圾

# import sys
# a = "hello world"
# b = c
# sys.getrefcount(a)得到的值-1就是真正的引用个数

python 垃圾回收的更多相关文章

  1. Python垃圾回收机制--完美讲解!

    转自: http://www.jianshu.com/p/1e375fb40506 先来个概述,第二部分的画述才是厉害的. Garbage collection(GC) 现在的高级语言如java,c# ...

  2. python垃圾回收机制与小整数池

    python垃圾回收机制 当引用计数为0时,python会删除这个值. 引用计数 x = 10 y = x del x print(y) 10 引用计数+1,引用计数+1,引用计数-1,此时引用计数为 ...

  3. python垃圾回收机制:引用计数 VS js垃圾回收机制:标记清除

    js垃圾回收机制:标记清除 Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理 当变量进入环境时,将这个变量标记为"进入 ...

  4. python垃圾回收

    python垃圾回收 python垃圾回收主要使用引用计数来跟踪和回收垃圾.在引用计数的基础上,通过“标记—清除”解决容器对象可能产生的循环引用问题,通过“分代回收”以空间换时间的方法提高垃圾回收效率 ...

  5. 《垃圾回收的算法与实现》——Python垃圾回收

    Python垃圾回收 python采用引用计数法进行垃圾回收 Python内存分配 python在分配内存空间时,在malloc之上堆放了3个独立的分层. python内存分配时主要由arena.po ...

  6. python垃圾回收机制(Garbage collection)

    由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...

  7. python 垃圾回收详解

    原文:https://zhuanlan.zhihu.com/p/31150408 总纲 策略和垃圾回收系统工作内容 引用计数详解 标记-清除+分代收集 循环引用 编程应用-常见方法 ex 过程详解 使 ...

  8. python垃圾回收算法

    标准python垃圾回收器由两部分组成,即引用计数回收器和分代垃圾回收器(即python包中的gc module).其中,引用计数模块不能被禁用,而GC模块可以被禁用. 引用计数算法 python中每 ...

  9. python 垃圾回收笔记

    目录 引用计数 python内部的引用计数机制 循环引用 调试内存泄漏 总结 python 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量:计算完成后,再将结果输出到永久性 ...

随机推荐

  1. [sklearn] 官方例程-Imputing missing values before building an estimator 随机填充缺失值

    官方链接:http://scikit-learn.org/dev/auto_examples/plot_missing_values.html#sphx-glr-auto-examples-plot- ...

  2. 浅析 Bag of Feature

    Bag of Feature 是一种图像特征提取方法,它借鉴了文本分类的思路(Bag of Words),从图像抽象出很多具有代表性的「关键词」,形成一个字典,再统计每张图片中出现的「关键词」数量,得 ...

  3. python3-面向对象进阶(内置方法)

    面向对象进阶: isinstance和issubclass 反射 __setattr__,__getattr,__delattr__ __setitem__,__getitem,__delitem__ ...

  4. python3编码(encode,decode)

    python3默认编码为unicode,由str类型进行表示.二进制数据使用byte类型表示. 字符串通过编码转换成字节码,字节码通过解码成为字符串 encode:str --> bytes d ...

  5. dubbo源码分析12——服务暴露3_doExportUrls()方法分析

    本文紧接上文,doExportUrls()方法位于ServiceConfig类中,代码入口如下: private void doExportUrls() { List<URL> regis ...

  6. Linux 文件系统IO性能优化【转】

    转自:https://blog.csdn.net/doitsjz/article/details/50837569 对于LINUX SA来说,服务器性能是需要我们特别关注的,包括CPU.IO.内存等等 ...

  7. C/S 开发框架 ----- 广州本地

    C/S 开发框架 -----  广州本地: 1) 爱奇迪    http://www.iqidi.com       发现一个源码出售站   http://www.51aspx.com/code/co ...

  8. win7经常出现“关闭xxxx前您必须关闭所有会话框”

    这可能是windows的一个BUG,在没有关闭输入法的状态下它不默认你关闭了所有窗口,只要把输入法切换回默认的英文输入法就可以正常关闭了

  9. FFmpeg Scaler Options

    算法 帧率 图像主观感受 SWS_FAST_BILINEAR 228 图像无明显失真,感觉效果很不错. SWS_BILINEAR 95 感觉也很不错,比上一个算法边缘平滑一些. SWS_BICUBIC ...

  10. 配置国内 Docker Registry Mirror

    由于国内特殊的网络环境,往往我们从Docker Hub中拉取镜像并不能成功,而且速度特别慢. 那么我们可以给Docker配置一个国内的registry mirror,当我们需要的镜像在mirror中则 ...