博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习教程(Python学习路线):Python3之对象垃圾收集机制浅析
阅读量:2382 次
发布时间:2019-05-10

本文共 901 字,大约阅读时间需要 3 分钟。

Python学习教程(Python学习路线):Python3之对象垃圾收集机制浅析

在这里插入图片描述

###概述

GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用。 在Python中,它在每个对象中保持了一个计数器,用于记录指向该对象的的引用的个数。一旦这个计数器为0时,则立即回收该对象,对象占用的内存空间将被释放。

引用计数

我们可以利用简单的变量引用和销毁窥见引用计数过程。

增加引用计数

增加引用计数的方式多种,即对象进行引用,那么计数器都会+1

# 创建第一个引用a = 3# 用其他变量名引用b = a# 成为一个容器的对象L = [1, a]# 作为参数传递str(a)

减少引用计数

同理,以下是减少引用计数的一些方法

# 一个本地引用离开了其作用范围。比如`str()`函数结束时str(a)# 对象的别名被显式销毁 del a # 对象的一个别名被复制给其他对象 a = 'Python'# 对象从一个窗口对象中移除 L.remove(a)# 窗口对象本身被销毁 del L

循环引用问题

什么是循环引用?A和B相互引用而再没有外部引用A与B中的任何一个,它们的引用计数虽然都为1,但显然应该被回收。

# 对象a的引用计数为 1a = {}# 对象B的引用计数为 1b = {}# B的引用计数增1a['b'] = b# A的引用计数增1b['a'] = a# A的引用减 1,最后A对象的引用为 1del a# B的引用减 1, 最后B对象的引用为 1del b

在这个例子中程序执行完del语句后,A、B对象已经没有任何引用指向这两个对象,但这两个对象却还各自引用这对象,虽然两个对象已经被del了,即我们不能再使用这两个对象,即垃圾对象,但是他们的引用计数并没有减少到零。即根据引用计数机制,他们并不会被回收,且会一直驻留在内存中,造成内存泄漏。为了解决对象的循环引用问题,而Python引入了标记-清除和分代回收两种GC机制来解决优化此问题。

更多的Python学习教程Python学习路线会继续为大家更新

转载地址:http://wxkab.baihongyu.com/

你可能感兴趣的文章
能Ping通外网但就是不能打开所有网页的解决办法
查看>>
SpringCloud Zuul 网关
查看>>
SpringCloud 分布式链路追踪、分布式日志系统
查看>>
SpringCloud Config 配置管理
查看>>
CNNs在图像压缩领域的运用——An End-to-End Compression Framework Based on Convolutional Neural Networks
查看>>
Win7下的一些EXE文件图标莫名奇妙丢失
查看>>
[ZZ]变速齿轮作者的文章--绝杀反外挂方案
查看>>
了解内核的装入地址和入口地址,vmlinux.bin与vmlinux
查看>>
内核里面对大小写字符的转换
查看>>
eclipse的奇怪的更新方式
查看>>
MIPS技术公司官方对linux的支持信息
查看>>
openflow简介
查看>>
windows7配置虚拟AP的脚本
查看>>
CompilationUnit
查看>>
日本用大数据技术预测流感 预测与分析结果精确
查看>>
我们为什么需要大数据技术?
查看>>
大数据使超级计算机迎来第二春
查看>>
多地政府探索“大数据”惠民之道 信息垄断须打破
查看>>
民营经济的支撑不可或缺
查看>>
共赢安全大数据 SIEM助企业准确识别威胁
查看>>