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 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量:计算完成后,再将结果输出到永久性 ...
随机推荐
- python,魔法方法指南
1.简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加“魔法”的特殊方法. 它们经常是两个下划线包围来命名的 ...
- [转]python3之日期和时间
转自:https://www.cnblogs.com/zhangxinqi/p/7687862.html#_label6 阅读目录 1.python3日期和时间 2.时间元组 3.获取格式化的时间 4 ...
- Node.js安装和简介
Node.js是基于Chrome的V8 JavaScript引擎构建的JavaScript运行平台.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 的包 ...
- 最全的libcurl库资源整理
C++ 用libcurl库进行http 网络通讯编程 百度登陆协议分析!!!用libcurl来模拟百度登陆 C++使用libcurl做HttpClient 使用libcurl库进行HTTP的下载 li ...
- Web QQ 协议 登录加密算法 —— VC++实现
BOOL ToHexStr(const CHAR * lpStr, int nSrcLen, CHAR * lpHex, int nDestLen) { const CHAR cHexTable[] ...
- vc++基础班[25]---系统信息的获取
--------------------------------------------------------------------------- VC 驿站 WwW.CcTry.CoM 多抽出一 ...
- linux系统网络相关问题
暂时将你的 eth0 这张网络卡的 IP 设定为 192.168.1.100 ,如何进行? ifconfig eth0 192.168.1.100 我要增加一个路由规则,以 eth0 连接 192.1 ...
- 题解-poj3682King Arthur's Birthday Celebration
Problem poj-3682 题目大意:抛一次硬币有\(p\)的概率得到正面,当有\(n\)次正面时停止,抛第\(i\)次的花费为\(2i-1\),求抛的期望次数和期望花费 Solution 本来 ...
- java8 lambda方法引用
注意引用方法的参数列表与返回值类型要与函数式接口中的抽象方法的参数列表与返回值类型保持一致 主要有三种语法格式: * * 对象::实例方法名 * * 类::静态方法名 * * 类::实例方法名 pub ...
- SpringBoot和SpringCloud面试题
一. 什么是springboot 1.用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 2.创建独立的spring引用程序 main方法运行 ...