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 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量:计算完成后,再将结果输出到永久性 ...
随机推荐
- SQL 删除的三个语句:DROP、TRUNCATE、 DELETE 的区别
转载:http://www.runoob.com/sql/sql-delete.html DROP: DROP test; 删除表test,并释放空间,将test删除的一干二净. TRUNCATE: ...
- 【转】fnmatch模块的使用——主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格
[转]fnmatch模块的使用 fnmatch模块的使用 此模块的主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格.fnmatch比较简单就4个方法分别是:fnmatch,fnm ...
- [转]python中的正则表达式(re模块)
转自:https://www.cnblogs.com/tina-python/p/5508402.html 一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成 ...
- Navicat for MySQL连接mysql数据库时提示错误:Can't connect to MySQL server (10060)
导致些问题可能有以下几个原因: 1.网络不通: 2.服务未启动: 3.防火墙端口未开放: a)首先确认mysql配置正确,并正确开启 service mysqld start; 设置mysql远程连接 ...
- 软件包.deb的安装及卸载------dpkg
文章链接:https://blog.csdn.net/qq_36764147/article/details/81332606 删除带有rc的软件包:https://blog.csdn.net/chr ...
- 关于KEIL编译报错和警告问题
编译时候报错.. Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced 上网找了 ...
- 计算机信息类ComputerInfo(车)
using System; using System.Management; using System.Net; using System.Net.Sockets; using System.Text ...
- Java位运算符浅析
在学习源码中,发现有大量使用位运算符,这样做的目的是为了节约内存开销和加快计算效率. 位运算符,这个”位”代表这什么? 位:二进制位简称“位”,是二进制记数系统中表示小于2的整数的符号,一般用1或 0 ...
- easyui datagrid 隔行变色
easyui datagrid 隔行变色 一:实现样图 二:实现代码 $('#dataGrid').datagrid({ rowStyler:function(index,row){ if (row ...
- html固定表头,表单内容垂直循环滚动
<!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8 ...