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

垃圾回收机制

时间:2023-12-29 09:01:34浏览次数:27  
标签:变量 扫描 回收 gc 垃圾 机制

垃圾回收机制(GC)

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

(1)引用计数

name = 'dhy' # 'dhy' 的 引用计数就是 1
a = name # 'dhy' 的 引用计数就是2

(2)标记清除

#一旦你的内存空间装满了,溢出,那此时程序就会停止,然后进行两项工作
#标记:'dhy' :0
#清除:

(3) 分代回收

![img](C:\Users\asus\Desktop\新建文件夹 (3)\垃圾回收机制.assets\2322215-20230515145624957-1914893419.png)

#第一阶段:新生代#[] ---30s扫描一次
#第二阶段:青春代[] --- 3min扫描一次
#第三阶段:老年代[] --- 5min扫描一次
  • 分代回收的核心思想是:
    • 在历经多次扫描的情况下,都没有被回收的变量,gc机制就会认为,该变量是常用变量,gc对其扫描的频率会降低
    • 具体实现原理如下:
分代指的是根据存活时间来为变量划分不同等级(也就是不同的代) 

新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,

青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,

接下来,青春代中的对象,也会以同样的方式被移动到老年代中。

也就是等级(代)越高,被垃圾回收机制扫描的频率越低

标签:变量,扫描,回收,gc,垃圾,机制
From: https://www.cnblogs.com/dhyuan/p/17917217.html

相关文章

  • 基于源码去理解Iterator迭代器的Fail-Fast与Fail-Safe机制
    原创/朱季谦在Java编程当中,Iterator迭代器是一种用于遍历如List、Set、Map等集合的工具。这类集合部分存在线程安全的问题,例如ArrayList,若在多线程环境下,迭代遍历过程中存在其他线程对这类集合进行修改的话,就可能导致不一致或者修改异常问题,因此,针对这种情况,迭代器提供了两种处......
  • python 将文件移入回收站
     python如果要删除一个文件,通常使用os.remove(filename)但是这样就直接从磁盘删除了。有些文件需要删除到回收站,以便误删后还能找回文件fromwin32com.shellimportshell,shellcondebug=Falsedefdeltorecyclebin(filename):print('deltorecyclebin',filename)......
  • 【golang】怎么在Go语言中实现锁机制
    Go语言的锁在Go语言中,最常用的锁是互斥锁(Mutex)。互斥锁是一种特殊的二进制信号量,用于控制对共享资源的访问。Go语言通过标准库中的"sync"包提供了互斥锁的功能。互斥锁的类型定义如下:type Mutex struct {    state int32    sema  uint32}其中state字段用于记......
  • 双重预防机制在安全生产中的应用-天拓四方
    双重预防机制是企业通过风险分级管控和隐患排查治理两个环节,实现对安全生产风险的全面管控。其中,风险分级管控是指通过对企业生产过程中存在的危险源进行辨识、评估和分级,制定相应的管控措施,降低事故发生的可能性;隐患排查治理是指通过对企业生产现场进行全面排查,发现存在的安全隐患......
  • 深入探讨Java反射:解析机制与应用场景
    当谈及Java编程语言的强大功能时,反射(Reflection)是一个不可忽视的特性。反射允许程序在运行时检查和操作其自身的结构,这为开发者提供了一种动态获取信息和执行操作的途径。在本篇博客中,我们将深入探讨Java反射的原理、用法以及一些实际场景中的应用。什么是反射?反射是Java的一种......
  • 2、jvm虚拟机垃圾回收机制
    一、首先了解一下堆栈内存1、jvm内存结构  从上图可以看出,整个JVM内存是由栈内存、堆内存和永久代构成。年轻代(Newgeneration)=eden+s0+s1堆内存=年轻代+老年代(Oldgeneration)JDK1.8以前: JVM内存=栈内存+堆内存+永久代JDK1.8以后: 由元空间取代了永久代,......
  • Redis系列之事务机制
    什么是Redis事务学习mysql数据库的时候,我们知道了事务的ACID特性,Redis也是支持事务的,不过和数据库的事务又有什么区别?在mysql数据库中,我们使用begin开启事务,提交是commit,回滚是rollback,然后Redis中的事务是怎么一回事?redis的事务其实可以看做是一组命令按照顺序,串行执行队列中的命......
  • Java多线程:锁机制深入剖析
    在并发编程中,正确地管理资源的访问至关重要。Java提供了多种锁机制来协调多个线程之间对共享资源的访问。本文将深入探讨Java多线程中的锁机制,包括内置锁(synchronized关键字)、显式锁(java.util.concurrent.locks.Lock)以及并发集合(java.util.concurrent)提供的锁机制。1.内置锁(Synchr......
  • 垃圾回收机制
    一般说来,我们要解决三个问题:1、回收哪些内存?2、什么时候回收?3、如何回收?  首先我们来看Java的四种引用类型: 强引用:代码中普遍存在的,只要强引用还存在,垃圾收集器就不会回收掉被引用的对象。 软引用:SoftReference,软引用是介于强引用和弱引用之间的引用类型。当系统内......
  • 云服务器比传统服务器更安全的原因与实现机制
    本文分享自天翼云开发者社区《云服务器比传统服务器更安全的原因与实现机制》,作者:3****m随着互联网的普及和云计算技术的发展,越来越多的企业和组织选择使用云服务器来提供和存储数据。与传统服务器相比,云服务器在安全性方面具有诸多优势。本文将围绕云服务器比传统服务器更安全的......