垃圾回收(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
英文地址,請注明出處:http://en.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;彼此的互動都從這個空間開始。今天圍繞…