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

垃圾回收机制

时间:2023-12-11 21:35:36浏览次数:28  
标签:标记 对象 清除 回收 垃圾 机制 内存

垃圾回收机制(GC)

  • 专门用来回收不可用的变量值所占用的内存空间(在内存中,没有变量名指向的数据都是垃圾数据)
  • 引用计数
  • 标记清除
  • 分代回收

【1】引用计数

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

【2】标记清除

  • 一旦内存空间装满了,溢出,那此时程序就会停止,然后进行两项工作

    • 标记
    'heart' : 1
    
    • 清除
      • 清除的过程将遍历堆中所有的对象,将没有标记的对象全部清除掉。
      • 清除非存活对象: 遍历整个堆内存,将没有被标记的对象认定为非存活对象,进行清除操作。这些对象所占用的内存空间将被释放。

【3】分代回收

  • 第一阶段: 新生代

    • 新生代中的对象:采用较为频繁的垃圾回收,通常使用标记-复制算法,即标记存活对象,然后将存活对象复制到另一块内存中,最后清理掉原有的内存。这能有效处理新生代中大部分对象的垃圾回收。
  • 第二阶段: 青春代

    • 青春代中的对象:采用标记-清除算法,其目标是处理在新生代中经历了一次回收的对象。由于这些对象的生命周期较长,不需要频繁地进行回收。
  • 第三阶段: 老年代

    • 老年代中的对象:采用标记-清除算法标记-整理算法。老年代的对象生命周期更长,采用相对稳定的垃圾回收策略。
  • 分代回收机制对不同代的垃圾回收频率进行了调整:

    • 新生代的垃圾回收比较频繁,因为大部分对象在新生代中被创建后很快就变得不可达。
    • 青春代的垃圾回收频率较低,因为这些对象已经经历了一次回收,存活概率相对较高。
    • 老年代的垃圾回收频率较低,因为老年代的对象生命周期较长。

(4)小结

  • 垃圾回收机制在清理垃圾和释放内存的背景下发挥着重要的作用。
  • 通过引入分代回收,系统在极小部分垃圾不会被及时释放的代价下,降低了引用计数整体扫描的频率,从而提升了性能。
  • 这是一种以空间换时间的解决方案,通过划分不同代别的对象,根据它们的存活时间采取不同的垃圾回收策略。
  • 在实际应用中,垃圾回收机制的设计需要综合考虑性能、精确度和实现的复杂性等因素。
  • 尽管存在一些问题,如新生代到青春代的延迟、权重提升的不精确性等,但分代回收仍然是一种有效的策略,通过权衡各种因素,系统可以更好地管理内存,提高程序的运行效率。

标签:标记,对象,清除,回收,垃圾,机制,内存
From: https://www.cnblogs.com/ssrheart/p/17895598.html

相关文章

  • 如何实现SPI机制
     一.定义SPI(ServiceProviderInterface)是一种面向接口编程的技术,它可以让一个程序根据接口约定规范自动发现和加载对应的实现类。它是一种Java种的接口编程规范,它定义了接口和服务提供者之间的约定规范,使得在运行时动态加载实现该接口的类。SPI机制是通过在服务提供者接口......
  • Go Work Stealing 机制
    一、什么是WorkStealingGo语言的WorkStealing机制是一种用于调度协程(Goroutines)的策略,有助于充分利用多核CPU,提高并发性能,降低锁竞争,从而使Go程序更高效地运行WorkStealing机制的核心思想:每个操作系统线程(M)都有一个本地任务队列,它会尽可能地先执行自己队列中的协程。当某......
  • 一文详解大模型归因机制,幻觉问题有救了!
    作者|谢年年、python大模型的幻觉问题一直是一个亟待解决的挑战。由于大模型的训练语料来源广泛,且都是未经筛选的现实世界文本,预训练的目标也仅在于预测下一个单词,并未对生成内容的真实性进行建模和验证,这导致了大模型幻觉问题的频繁出现。为了增强模型事实准确性和可验证性,一种......
  • 15、自定义绘制图形(双缓冲机制)
    效果图 //drawwidget.h#ifndefDRAWWIDGET_H#defineDRAWWIDGET_H#include<QObject>#include<QWidget>#include<QtGui>#include<QMouseEvent>//鼠标事件#include<QPaintEvent>//绘制事件#include<QResizeEvent>//实时获取窗口操作等的大......
  • mysql的锁机制运行原理是什么
    MySQL的锁机制是数据库管理系统用来协调多个并发事务对共享资源(例如数据库表)进行访问的一种方式。MySQL支持多种锁类型,包括共享锁和排它锁。以下是MySQL锁机制的一些基本原理:锁的类型:共享锁(SharedLock):多个事务可以同时持有共享锁,用于读取共享资源,不阻塞其他事务的共享锁。排它锁(E......
  • Spring的事件发布机制
    观察者模式的事件思想观察者模式作为对象间一对多依赖关系的实现。在观察者模式中,被观察者相当于事件中的时间发布者,而观察者相当于事件中的监听者。因此可以说:观察者模式就是事件驱动机制的一种体现。事件驱动一个常见的形式就是发布-订阅模式,在跨进程的通信间,我们常常使......
  • string 的扩容机制
    C++string类的扩容机制主要取决于编译器的实现,但一般来说,它们都遵循一种动态数组的策略,即当字符串的大小超过当前容量时,就会分配更大的内存空间。以下是一种常见的扩容策略1:size_type_Grow_to(size_type_Count)const{size_type_Capacity=capacity();if(_Capac......
  • pytest + yaml 框架 -59.用例失败重跑机制pytest-rerunfailures
    前言有些接口可能不太稳定,第一次跑的时候由于网络原因或者其它原因失败,但是重新跑2次又成功了。对于这种需要重新跑几次的场景,可以使用用例失败重跑机制,需安装pytest-rerunfailures插件。场景示例失败重跑需要依赖pytest-rerunfailures插件,使用pip安装就行pipinstallp......
  • 触想嵌入式工业一体机在智能垃圾分类站的应用
    1、行业发展背景根据住建部给出的目标,到2025年前,全国地级及以上城市要基本建成垃圾分类处理系统。随着垃圾分类政策在全国强制落地,终端执行层面面临的最迫切问题是垃圾分类的准确性与社会参与意愿,而这两点与垃圾分类操作的简易程度密切相关。在此情形下,集成新一代信......
  • Nacos源码(七):客户端实例变更事件机制源码分析
    在给出的NamingExample示例中,给出客户端订阅的代码,详情如下:客户端的订阅机制是通过事件完成的,NacosNamingService#subscribe()详情如下:客户端订阅主要步骤:1、注册事件监听器2、客户端订阅客户端订阅在Nacos源码(六):客户端服务发现源码分析中已经做了......