python 垃圾回收
# 垃圾回收
# 小整数对象池
# 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 垃圾回收的更多相关文章
- Python垃圾回收机制--完美讲解!
转自: http://www.jianshu.com/p/1e375fb40506 先来个概述,第二部分的画述才是厉害的. Garbage collection(GC) 现在的高级语言如java,c# ...
- python垃圾回收机制与小整数池
python垃圾回收机制 当引用计数为0时,python会删除这个值. 引用计数 x = 10 y = x del x print(y) 10 引用计数+1,引用计数+1,引用计数-1,此时引用计数为 ...
- python垃圾回收机制:引用计数 VS js垃圾回收机制:标记清除
js垃圾回收机制:标记清除 Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理 当变量进入环境时,将这个变量标记为"进入 ...
- python垃圾回收
python垃圾回收 python垃圾回收主要使用引用计数来跟踪和回收垃圾.在引用计数的基础上,通过“标记—清除”解决容器对象可能产生的循环引用问题,通过“分代回收”以空间换时间的方法提高垃圾回收效率 ...
- 《垃圾回收的算法与实现》——Python垃圾回收
Python垃圾回收 python采用引用计数法进行垃圾回收 Python内存分配 python在分配内存空间时,在malloc之上堆放了3个独立的分层. python内存分配时主要由arena.po ...
- python垃圾回收机制(Garbage collection)
由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...
- python 垃圾回收详解
原文:https://zhuanlan.zhihu.com/p/31150408 总纲 策略和垃圾回收系统工作内容 引用计数详解 标记-清除+分代收集 循环引用 编程应用-常见方法 ex 过程详解 使 ...
- python垃圾回收算法
标准python垃圾回收器由两部分组成,即引用计数回收器和分代垃圾回收器(即python包中的gc module).其中,引用计数模块不能被禁用,而GC模块可以被禁用. 引用计数算法 python中每 ...
- python 垃圾回收笔记
目录 引用计数 python内部的引用计数机制 循环引用 调试内存泄漏 总结 python 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量:计算完成后,再将结果输出到永久性 ...
随机推荐
- swap扩展
没有独立的分区,本地回环设备(使用软件来模拟实现硬件) 创建一个镜像文件 https://blog.csdn.net/linuxnews/article/details/51271875 有独立的分区
- $resource详解
$resource 首先添加$resource的引用 <script src="Scripts/angular.min.js"></script> < ...
- 【VMware vSphere】VMware vSphere简单了解
*什么是VMware vSphere 说VMware vSphere可能刚开始都是一脸懵逼,但是看到VMware时,首先想到的是不是VMware Workstation?也就是虚拟 ...
- [转]python3之paramiko模块(基于ssh连接进行远程登录服务器执行命令和上传下载文件的功能)
转自:https://www.cnblogs.com/zhangxinqi/p/8372774.html 阅读目录 1.paramiko模块介绍 2.paramiko的使用方法 回到顶部 1.para ...
- 设计模式C++学习笔记之十三(Decorator装饰模式)
装饰模式,动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 13.1.解释 main(),老爸 ISchoolReport,成绩单接口 CFourt ...
- 题解-Codeforces710F String Set Queries
咕了好久没更博客,最近得知可以去冬眠营玩耍,还可以搭顺风车回广州过年 (最近做到的比较有意思的题目:bzoj3958.hihocoder1419) Problem Codeforces-710F--洛 ...
- UML教程
1.前言 1.1 前言 本资料对UML1.5各种模型图的构成和功能进行说明,通过本资料的学习达到可以读懂UML模型图的目的.本资料不涉及模型图作成的要点等相关知识. 1.2 UML概述 1.2.1 ...
- JS中的进制转换
1 前言 js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现. 仅作为记录. 2 代码 //10进制转为16进制 (10).to ...
- emoji错误:ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value:
1 前言 由于mysql数据库要存储微信昵称,但是当微信昵称带有emoj表情会出现标题的错误. 然后发现是emoj编码是4个字节保存的,于mysql数据库编码格式utf8默认保存的是1到3个字节. 2 ...
- Sql 08数据库还原数据库时一直提示数据库被占用
直接试试这个sql语句吧 ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER database [datebase] ...