2020年12月5日21:47:35 王凯玉

python中的垃圾回收机制

引用计数

# 引用计数

引用计数是编程语言中的一中内存管理技术,可以将资源的被引用次数保存起来。

当引用计数为0时,资源将被释放

# 如何让引用计数减少

del语句会删除对象的一个引用,这将导致该引用指向的对象的引用计数-1

# 引用计数会导致什么问题

由于两个或多个对象相互引用时,彼此引用计数不为0,造成循环引用无法回收,但是可以用标记清除机制来解决。

# 如何查看引用计数

import sys

sys.getrefcount(obj)

标记清除

# 标记清除

标记清除分为两个阶段:先标记对象(垃圾检测)、再清除垃圾(垃圾回收)

# 标记

在这个阶段,垃圾回收器会先从根对象开始遍历,每一个可以从根对象访问到的对象都会被添加标记,这个对象就会被标识为可到达对象(不会被清除)

# 清除

这时候,垃圾回收器就会对堆内存从头到尾进行线性遍历,如果发现有对象没有被标识成可多达对象,就会把该对象回收,之后再讲原来标记为可到达对象的标识抹掉,以便进行下一次的垃圾回收操作。

# 标记清除有什么问题

标记清除算法最大的缺点就是垃圾收集后有可能造成大量的内存碎片,其次就是,由当遍历的内存节点较多时,每次回收都会花费很多的时间在遍历上。

# 常见的名词

collector:垃圾收集器

mutator:垃圾收集器之外的部分,比如当前的应用程序

mutator roots:是mutator的根对象,通常是分配在对内存之外,可以直接被访问到的对象,一般就是指静态的全局变量。

可到达对象:从根对象开始遍历,可以访问到的对象,也就是mutator正在使用的对象。

分代回收

# 分代回收

分代回收是一种典型的以空间换时间的技术。

简单说就是把回收对象分成多个代,比如青年代、中年代、老年代。每一个代都是一个集合。

当青年代满了的时候,就会对所有代执行标记清除动作,中年代满了,就会清理中年代和老年代,老年代满了只会清理自己(老年代的存活时间是最长的)

简述python垃圾回收机制_python中的垃圾回收机制简述相关推荐

  1. 关于python的垃圾回收机制_Python中的垃圾回收机制

    GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用.GC彻底把程序员从资源管理的重担中解放出来,让他们有更多的时间放在 ...

  2. 简述python中的内存管理机制_Python中的内存管理机制

    Python是如何进行内存管理的 python引用了一个内存池(memory pool)机制,即pymalloc机制,用于管理对小块内存的申请和释放 1.介绍 python和其他高级语言一样,会进行自 ...

  3. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  4. python装饰器特性iy雾_扣丁学堂简述Python 装饰器装饰类中的方法

    扣丁学堂简述 Python 装饰器装饰类中的方法 本篇文章小编主要和读者们分享一下 Python 装饰器装饰类中的方法, 文中会有详细的代码 列出供大家参考,下面随小编一起来了解一下吧. 有一个类 T ...

  5. python有向图_Python 中的垃圾回收机制

    一.概述 python采用的是引用计数机制为主,标记-清除和分代收集(隔代回收)两种机制为辅的策略. 现在的高级语言如java,c#等,都采用了垃圾收集机制,而不再是c,c++里用户自己管理维护内存的 ...

  6. python 垃圾回收哪时候执行_Python 中的垃圾回收机制是如何工作的?

    CPython 中垃圾回收的主要思路 1.维护引用计数器 .对于每一个对象,都有一个对于该对象的引用次数的计数器.如果这个计数器的值减为了 0 ,这就代表这个对象在程序中已经没用了,那么该对象所占用的 ...

  7. python中垃圾回收机制_Python中的变量和垃圾回收机制

    1.python中的变量 python 和 java 中的变量本质不一样. java 中声明变量时要指定变量的数据类型,int.str或某一类,之后虚拟机就会在内存中申请一块空间,空间的大小跟类型相关 ...

  8. python gc教程_python中的垃圾回收(GC)机制

    一.引用计数 Python 垃圾回收以引用计数为主,分代回收为辅.引用计数法的原理是每个对象维护一个ob_refcnt,用来记录对象被引用的次数,也就是用来追踪有多少个引用指向了对象,当发生以下四种情 ...

  9. python的内存机制_python中的内存机制

    首先要明白对象和引用的概念 (例子:a=1, a为引用,1为对象,对象1的引用计数器为1,b=1此时内存中只有一个对象1,a,b都为引用,对象的引用计数器此时为2,因为有两个引用) a=1,b=1id ...

最新文章

  1. 百度最近开源了分布式配置中心,名叫BRCC
  2. python 冷门_Python最冷门的模块
  3. 趣文:如果网络浏览器是妹纸
  4. SprinBoot易学难精
  5. Knative Eventing 之 Sequence 介绍
  6. sed查找文件包含字段_sed(查找替换) 与awk(提取字段)
  7. Linux运维的黑客之路
  8. 用Neo4j图形数据库打造专属于你的高bigger关系图
  9. 虚拟机修改默认SSH端口号为10022
  10. 获取所有QQ好友列表以及好友信息
  11. spss多元线性回归散点图_利用SPSS进行线性回归分析
  12. Python之xlsx文件转csv文件
  13. spark idea报错:json standard allows only one-top level
  14. HoloLens开发学习笔记(一):HoloLens简介
  15. 【刷题】BZOJ 2959 长跑
  16. JS函数的参数(arguments)的使用
  17. 介绍Spring Boot 启动时,自动执行指定方法的 7 种方法
  18. 首批复星 BioNTech mRNA新冠疫苗抵达香港和澳门
  19. jQuery的内部全局变量和构造函数
  20. FTIR表征碳纳米材料—专项文献阅读

热门文章

  1. 安装python环境及pip_Python环境搭建及pip的使用
  2. 系统 CPU 突然飙升且 GC 频繁,如何排查
  3. 用paddleocr识别汉字_汉字设计中的度量标准(三)
  4. ppt流程图字体太小_PPT演示让你尴尬的5大突发情况,早学早预防!
  5. c读取ini配置文件_Go-INI - 超赞的Go语言INI文件操作库
  6. http / 关于长连接和短链接的理解
  7. JSON / 格式详解
  8. Keil uVision2 简介
  9. 物生政可以报计算机专业吗,新高考物生政组合好吗?高考物生政可以报什么专业?...
  10. python discuz搜索api_Python + Bottle + 谷歌搜索Api 实现简单搜索引擎