垃圾回收(GC)

内存管理策略,在业务进程运行的过程中,由垃圾收集器以类似守护协程的方式在后台运行,按照指定策略回收不再被使用的对象,释放内存空间进行回收

优势:

屏蔽内存回收的细节:屏蔽复杂的内存管理工作,更好聚焦于业务逻辑

以全局视野执行任务:全局管理临界资源的使用

劣势:

提高下限但降低了上限:失去控制主权,除运用有限的GC调优参数外,更多的自由度都被阉割,需要向系统看起,服从设定

增加额外成本:需要额外的状态信息用以存储全局的内存使用情况,有时需要中断整个程序用以支持垃圾回收工作

垃圾回收算法

标记清扫

可达对象:对象和对象之间通过指针记录依赖关系,通过指针依赖的路径实现标记,从根对象出发将所能达到的对象全部进行标记

不可达对象:清扫完一轮后,剩下没有被标记的对象,代表不在被使用方所关心,就可以对内存进行回收
在这里插入图片描述
标记:标记出当前还存活的对象

清扫:清扫到未被标记到的垃圾对象

类似于排除法的间接思路,不直接查找垃圾对象,而是标记存活对象,取补集推断出垃圾对象

会产生内部碎片,因为清扫后,空闲的内存块可能零星碎片化分布,对大对象需要分配内存,可能会因为无法化零为整导致分配失败

标记压缩

在标记清扫的基础上进行压缩,在清扫的同时,对还存活对象进行压缩整合,将已使用的内存块进行位置的转移,压缩在一起使得更加紧凑
在这里插入图片描述

半空间复制

以空间换时间

分配两片大小相等的空间fromspace和tospace

每轮只使用fromspace空间(正常分配内存),以GC作为分水岭划分轮次

GC时,将fromspace存活对象转移到tospace中,进行空间压缩整合

GC后交换fromspace和tospace,开启新轮次
在这里插入图片描述

引用计数

对象每被其他对象引用一次,计数器加1

每被删除引用一次,计数器减1

GC时,把计数器等于0的对象删除,不在被用户需要

无法解决循环引用或自引用问题
在这里插入图片描述

Golang垃圾回收

并发三色标记法+混合写屏障机制

三色标记法

在这里插入图片描述
属于标记清扫算法的一种实现

对象分为:黑白灰

从稳定的根对象出发

黑:对象自身存活,且指向对象都已标记完成

白:对象尚未被标记到,可能是垃圾对象

灰:对象自身存活,其指向对象还未标记完成

标记开始前,将根对象(全局对象,栈上局部变量等)置黑,将其所指向的对象置灰

标记规则是,从灰对象出发,将其所执行的对象都置灰,之后对当前灰对象置黑

标记结束后,白对象就是不可达的垃圾对象,进行清扫

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89705.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Datawhale AI夏令营-机器学习

比赛简介 「用户新增预测挑战赛」是由科大讯飞主办的一项数据科学竞赛,旨在通过机器学习方法预测用户是否为新增用户 比赛属于二分类任务,评价指标采用F1分数,分数越高表示模型性能越好。 如果你有一份带标签的表格型数据,只要…

Spring IOC容器在Web环境中是如何启动的(源码级剖析)?

文章目录一、Web 环境中的 Spring MVC 框架二、Web 应用部署描述配置传统配置(web.xml):Java配置类(Servlet 3.0):三、核心启动流程详解1. 启动流程图2. ★容器初始化入口:ContextLoaderListene…

18个优质Qt开源项目汇总

1,Clementine Music Player Clementine Music Player 是一个功能完善、跨平台的开源音乐播放器,非常适合用于学习如何开发媒体类应用,尤其是跨平台桌面应用。它基于 Qt 框架开发,支持多种操作系统,包括 Windows、macO…

计算机视觉:AI 的 “眼睛” 如何看懂世界?

1. 什么是计算机视觉:让机器 “看见” 并 “理解” 的技术1.1 计算机视觉的核心目标计算机视觉(CV)是人工智能的一个重要分支,它让计算机能够 “看懂” 图像和视频 —— 不仅能捕捉像素信息,还能分析内容、提取语义&am…

华为OD刷题记录

华为OD刷题记录 刷过的题 入门 1、进制 2、NC61 doing 订阅专栏

QT学习教程(二十五)

双缓冲技术&#xff08;Double Buffering&#xff09;&#xff08; 2、公有函数实现&#xff09;#include <QtGui> #include <cmath> using namespace std; #include "plotter.h"以上代码为文件的开头&#xff0c;在这里把std 的名空间加入到当前的全…

设计模式笔记_结构型_装饰器模式

1.装饰器模式介绍装饰器模式是一种结构型设计模式&#xff0c;允许你动态地给对象添加行为&#xff0c;而无需修改其代码。它的核心思想是将对象放入一个“包装器”中&#xff0c;这个包装器提供了额外的功能&#xff0c;同时保持原有对象的接口不变。想象一下&#xff0c;你有…

day25 力扣90.子集II 力扣46.全排列 力扣47.全排列 II

子集II给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情况。示例 1&…

Solidity 中的`bytes`

在 Solidity 中&#xff0c;bytes 和 bytes32 都是用来保存二进制数据的类型&#xff0c;但它们的长度、使用场景、Gas 成本完全不同。✅ 一句话区分类型一句话总结bytes32定长 32 字节&#xff0c;适合做哈希、地址、标识符等固定长度数据。bytes动态长度字节数组&#xff0c;…

初学者STM32—PWM驱动电机与舵机

一、简介 上一节课主要学习了输出比较和PWM的基本原理和结构&#xff0c;本节课就主要以实践为主通过STM32最小系统板和驱动器控制舵机和直流电机。 上一节课的坐标 初学者STM32—输出比较与PWM-CSDN博客 二、舵机 舵机是一种根据输入PWM信号占空比来控制输出角度的装置 输…

C++中的异常处理机制:try-catch

一、基本概念 异常&#xff08;Exception&#xff09;&#xff1a;程序执行过程中发生的非正常情况&#xff0c;比如除以零、访问越界、内存不足等。 异常处理&#xff08;Exception Handling&#xff09;&#xff1a;对异常情况进行捕获、分析&#xff0c;并采取补救措施&…

如何从 Windows 11 或 10 远程访问 Ubuntu 24.04 或 22.04 桌面

了解如何使用 RDP(远程桌面协议)从 Windows 11 或 10 远程连接 Ubuntu 24.04 Noble 或 22.04 LTS Jammy JellyFish 桌面的步骤。 Windows 提供了一个便捷的功能,称为远程桌面连接,它使用 RDP 协议来远程连接 PC。当从 Windows 系统建立远程桌面连接时,使用起来非常简单,…

Linux 服务器中,Tab 键自动补全功能失效

在 Linux 服务器中&#xff0c;Tab 键自动补全功能失效通常与 bash-completion 组件缺失或配置异常有关。以下是解决问题的两个关键 YUM 指令及操作步骤&#xff1a;1. 安装 bash-completion 组件 sudo yum install -y bash-completion说明&#xff1a; bash-completion 是提供…

SpringBoot服装推荐系统实战

Spring Boot 服装推荐系统实例 以下是基于Spring Boot实现的服装推荐系统的30个实例代码示例,涵盖核心功能和实现方法。 用户注册与登录功能 @RestController @RequestMapping("/api/auth") public class AuthController {@Autowiredprivate UserService userSer…

WIN10系统优化篇(一)

你是否疑惑为什么别人家的电脑运行速度飞快&#xff0c;而自己的却卡顿难用&#xff1f;其实&#xff0c;很多时候 Windows 系统可以通过简单的优化措施来提升使用体验。本文根据项目实战多年对 Win10 优化经验&#xff0c;将帮你找出系统卡顿的原因&#xff0c;并给出针对性的…

Flutter状态管理篇之ChangeNotifier基础篇(一)

目录 前言 一、什么是ChangeNotifier 二、ChangeNotifier 的基本用法 三、结合Flutter UI 使用 四、结合 Provider 的高级用法 五、ChangeNotifier 的优势与注意事项 5.1 优势 5.2 注意事项 六、与 ValueNotifier 的比较 七、实际应用场景 八、总结 前言 在 Flutter…

react17更新哪些新特性

React 17 是一个“无新特性”的发布版本&#xff0c;它的主要目标是为未来的 React 版本打好基础&#xff0c;同时改善与旧版本共存和升级的体验。虽然没有引入新的开发者 API&#xff0c;但它在内部做了很多重要的改进。以下是 React 17 的核心更新内容和特性&#xff1a;&…

Unity 常见数据结构分析与实战展示 C#

Unity 常见数据结构分析与实战展示 提示&#xff1a;内容纯个人编写&#xff0c;欢迎评论点赞&#xff0c;来指正我。 文章目录Unity 常见数据结构分析与实战展示1. 引言2. Unity 数据结构概述3. 常见数据结构1. 数组&#xff08;Array&#xff09;2. 列表&#xff08;List&…

【Linux网络编程】应用层协议 - HTTP

目录 初识HTTP协议 认识URL HTTP协议的宏观格式 Socket封装 TcpServer HttpServer 整体设计 接收请求 web根目录与默认首页 发送应答 完善页面 HTTP常见Header HTTP状态码 HTTP请求方法 cookie与session Connection 抓包 初识HTTP协议 应用层协议一定是基于…

技术演进中的开发沉思-36 MFC系列: 对话框

MFC这个章节里&#xff0c;不能忽视的是对话框的开发。如果把 MFC 程序比作一栋办公楼&#xff0c;那对话框就是「会客室」—— 它是程序与用户面对面交流的地方&#xff1a;用户在这里输入数据&#xff0c;程序在这里展示信息&#xff0c;彼此的互动都从这个空间开始。今天围绕…