首页 > 其他分享 >垃圾回收机制GC

垃圾回收机制GC

时间:2023-12-05 19:48:35浏览次数:28  
标签:清除 syh 回收 计数 GC 垃圾 引用

垃圾回收机制(GC)

(一)什么是垃圾回收机制

  • 垃圾回收机制简称GC,是Python解释器自带的一种机制。
  • 专门用来回收不可用的变量值所占用的内存空间(在内存中,没有变量名指向的数据都是垃圾数据)

(二)垃圾回收机制原理

  • 引用计数为主,垃圾回收、分代回收为辅。
  • Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。
  • 在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过“分代回收”(generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。

重点:

  • 十二个字

    • 引用计数
      • 引用计数就是:变量值被变量名引用的次数。
      • 一个变量值可以有多个变量名指向,有一个变量名指向计数就是1,有两个就是2。
      • 引用计数不为0,这个变量值就不是垃圾数据,引用计数为时,说明这个变量值没用了,可以清除了。
    name = 'syh'#'syh'的引用计数就是1
    s='syh' #'syh'的引用计数就是2
    
    • 标记清除
      • 在Python的内存管理中,标记-清除算法是一种常用的垃圾回收(Garbage Collection)方法之一。它的主要目标是解决循环引用导致的内存泄漏问题。
      • 通俗理解为当内存空间即将沾满的时候,python会暂停程序的运行,从头到位扫描一遍,并且把扫描出来的垃圾数据做标记,然后,一次性做清除处理。
      • 标记/清除算法的做法是当应用程序可用的内存空间被耗尽的时,就会停止整个程序,然后进行两项工作。
    #在我们的内存空间被占满了、溢出的时候,此时的程序就会停止,然后进行两项操作。
    #标记	:'syh' :0
    #清除	: 遍历整个堆内存,将没有被标记的对象认定为非存活对象,进行清除操作。这些对象所占用的内存空间将被释放。
    
    • 分代回收
      • 分代回收是一种垃圾回收的策略,其核心思想是根据对象的存活时间将其划分为不同的代。
    #'syh'
    #第一阶段:新生代[]	-----30s扫描一次
    #第二阶段:青春代[]	-----3min扫描一次
    #第三阶段:老年代[] -----5min扫描一次
    

    image-20231204145025054

标签:清除,syh,回收,计数,GC,垃圾,引用
From: https://www.cnblogs.com/suyihang/p/17877983.html

相关文章

  • [AGC032D] Rotation Sort 题解
    题目链接点击打开链接题目解法题目中的操作可以理解为一个点移动位置首先给出一个结论:每个点只会动至多一次考虑\(dp\)一个比较妙的状态设定是\(f_i\)表示\(i\)不动的方案数不妨枚举\(j\)表示上一个不动点,限制是\(j<i\)且\(p_j<p_i\)中间满足\(j<k<i\)且\(p_......
  • 【MySQL】回收普通用户对其他库的查询权限,普通用户只能看见自己的表
    如何解决已回收权限的普通用户对其他库的查看权限?正常来说,普通用户自己创建的数据库表的权限无法被回收,如果用户曾经被授权过所有权限,取消权限后,依然可以看见其他库。其原因就是被授予了grantoption权限,需要手动取消"WITHGRANTOPTION"是MySQL中的一个选项,用于将授予权限给其......
  • [AGC037D] Sorting a Grid 题解
    题目链接点击打开链接题目解法从后往前推一下,可以得到\(C\)一定要把每一行的数都归位到那一行,\(B\)一定要每一列的目标行数互不相同考虑构造\(B\)这个限制看起来略有些网络流,所以考虑如何建图令\(a_{i,j}\)的目标行数为\(ln_{i,j}\),我们由\(i\toln_{i,j}\)连边不......
  • 计算机毕业设计springcloud vue商城源码
    开发环境及工具:大等于jdk1.8,大于mysql5.5,idea(eclipse),nodejs,vscode(webstorm)技术说明:springcloudspringbootmybatisvueelementui代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。功能介绍:用户端:登录注册首页显示搜索商品,轮播图,商品分类,点击分类展示对应商,(......
  • 【C语言调用Python】Py_Finalize() 时报 GC 崩溃错误。
    Py_Finalize()时报GC崩溃错误。记一次有趣的报错随笔。报错现场在使用如下的报错代码时,在释放阶段调用Py_Finalize(),报如下Assert崩溃。原因结论在调用函数逻辑里的Exit0中,对变量pModuleDict和pClass进行了手动释放,引用计数-1(宏KLP_RELEASE),这两个变量是借用的引用变量,不......
  • Langchain-Chatchat+Qwen实现本地知识库
    1.基础介绍Langchain-Chatchat一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。大致过程包括加载文件->读取文本->文本分割->文本向量化->问句向量化->在文本向量中匹配出......
  • [AGC061C] First Come First Serve 题解
    题目链接点击打开链接题目解法易知总情况数为\(2^n\)考虑重复计算的情况为:存在\([l_i,r_i]\),满足没有\([l_j,r_j](i\neqj)\)选在此区间中可以得到一个容斥的\(dp\)做法这个转移虽然感觉很显然,但卡了我一个晚上,一直调不出令\(f_i\)为到\(i\)的容斥情况下的权值和......
  • 【python入门之垃圾回收机制】---python 垃圾回收机制
    【一】引入解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,那什么样的变量值是没有用的呢?单从逻辑层面分析,我们定义变量将变量值存......
  • python中级之垃圾回收机制
    引入当解释器在执行到变量赋值的时候,例如:name='xiaoying',那么会向内存空间申请一块空间来存放变量的值,而内存的空间是有限的,并不能无限制的存放,那么这就涉及到了一个回收的问题,当一个变量值没用了之后,简称(垃圾),那么垃圾就该放进垃圾桶中进行回收,将其所占用的内存空间释放回收......
  • [AGC063C] Add Mod Operations 题解
    题目链接点击打开链接题目解法好难想的构造题!!!到底是怎么想到的???首先无解的条件是好判的,如果有\(i\neqj,\;a_i=a_j\)且\(b_i\neqb_j\),那么就无解将\(a\)从小到大排序考虑下面的构造方式:\(y=curmax+x\),这样可以使最大值清\(0\),其他数都\(+x\),这是一个类似消元的过程,每......