(JVM)四種垃圾回收算法

在 JVM 中,垃圾回收(GC)是核心機制之一。為了提升性能與內存利用率,JVM 采用了多種垃圾回收算法。本文總結了 四種常見的 GC 算法,并結合其優缺點與應用場景進行說明。


1. 標記-清除(Mark-Sweep)

工作流程

  1. 標記:從 GC Roots 出發,標記所有存活對象。

  2. 清除:回收未標記的對象,釋放內存空間。

優點

  • 實現簡單。

  • 不需要對象移動。

缺點

  • 會產生 內存碎片,導致大對象分配困難。

  • 標記和清理效率相對較低。

應用

  • 常用于 老年代(Old Generation) 的早期實現。


2. 標記-整理(Mark-Compact)

工作流程

  1. 標記:標記存活對象。

  2. 整理:將存活對象移動到一端,按順序排列,清理邊界外的內存。

優點

  • 消除了 內存碎片

  • 內存利用率更高。

缺點

  • 需要移動對象,成本較高(復制和更新引用)。

應用

  • 常用于 老年代
    👉 老年代對象存活率高、體積大,不能用復制算法(浪費內存),也不適合只用標記-清除(碎片多),因此更適合標記-整理。


3. 復制算法(Copying)

工作流程

  1. 將內存分為兩塊相等的區域(From、To)。

  2. 每次只使用一塊區域(From)。

  3. GC 時,把存活對象復制到另一塊區域(To),然后清空 From。

優點

  • 無內存碎片。

  • 內存分配只需移動指針,效率高。

缺點

  • 內存利用率低(只能使用一半空間)。

  • 復制存活對象需要開銷。

應用

  • 常用于 新生代(Young Generation)
    👉 新生代對象生命周期短,大部分很快被回收,存活率低,復制的開銷不大。


4. 分代收集(Generational Collection)

核心思想

不同對象的生命周期不同,采用不同的回收算法:

  • 新生代:存活率低 → 使用 復制算法,效率高。

  • 老年代:存活率高、對象大 → 使用 標記-清除標記-整理

優點

  • 綜合利用不同算法的優勢。

  • 性能和內存利用率較高。

缺點

  • 實現復雜。

應用

  • HotSpot JVM 主流實現就是基于分代收集思想的(新生代 + 老年代)。


總結對比表

算法原理優點缺點應用場景
標記-清除標記存活對象,清理未標記對象實現簡單有碎片,效率低老年代(早期)
標記-整理標記存活對象并移動整理無碎片對象移動,成本高老年代
復制算法復制存活對象到另一塊區域快,無碎片浪費內存(50%利用率)新生代
分代收集新生代復制 + 老年代標記整理綜合性能好實現復雜主流 JVM 使用

總結

  • 新生代:對象生命周期短 → 復制算法

  • 老年代:對象大、存活率高 → 標記-整理

  • 分代收集:融合多種算法,實際生產環境的主流方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96059.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文閱讀:VGGT Visual Geometry Grounded Transformer

論文閱讀:VGGT: Visual Geometry Grounded Transformer 今天介紹一篇 CVPR 2025 的 best paper,這篇文章是牛津大學的 VGG 團隊的工作,主要圍繞著 3D 視覺中的各種任務,這篇文章提出了一種多任務統一的架構,實現一次輸…

python編程:一文掌握pypiserver的詳細使用

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 一、 pypiserver 概述 1.1 pypiserver是什么? 1.2 核心特性 1.3 典型應用場景 1.4 pypiserver優缺點 二、 安裝與基本使用 2.1 安裝 pypiserver 2.2 快速啟動(最簡模式) 2.3 使用私有服務器安裝包 2.4 向私有服務…

Git reset 回退版本

- 第 121 篇 - Date: 2025 - 09 - 06 Author: 鄭龍浩(仟墨) 文章目錄Git reset 回退版本1 介紹三種命令區別3 驗證三種的區別3 如果不小心git reset --hard將「工作區」和「暫存區」中的內容刪除,剛才的記錄找不到了,怎么辦呢&…

ARM 基礎(2)

ARM內核工作模式及其切換條件用戶模式(User Mode, usr) 權限最低,運行普通應用程序。只能通過異常被動切換到其他模式。快速中斷模式(FIQ Mode, fiq) 處理高速外設中斷,專用寄存器減少上下文保存時間,響應周期約4個時鐘周期。觸發條件為FIQ中…

Flutter 性能優化

Flutter 性能優化是一個系統性的工程,涉及多個層面。 一、性能分析工具(Profiling Tools) 在開始優化前,必須使用工具定位瓶頸。切忌盲目優化。 1. DevTools 性能視圖 DevTools 性能視圖 (Performance View) 作用:…

Spring事件監聽機制(三)

為了理解EvenListener注解的底層原理,我們可以自己實現一個類似的注解模擬實現。1.定義MyListener注解Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)public interface MyListener {}2.注解使用Componentstatic class SmsService {private static…

基于Springboot + vue3實現的小區物業管理系統

項目描述本系統包含管理員和用戶兩個角色。管理員角色:用戶管理:管理系統中所有用戶的信息,包括添加、刪除和修改用戶。房屋信息管理:管理房屋信息,包括新增、查看、修改和刪除房屋信息。車輛信息管理:管理…

交叉熵和KL散度

這個問題之前我也是傻傻分不清,決定整理一下,用更印象深刻的方式讓人記住。核心聯系:交叉熵 KL 散度 真實分布的熵 交叉熵作為 “絕對” 度量,會綜合真實分布的熵(固有難度)與預測誤差,直接體…

HTML 各種事件的使用說明書

HTML 各種事件的使用說明書 1. HTML 事件簡介 HTML事件是瀏覽器或用戶在網頁上執行的動作或發生的事情。當這些事件發生時,可以通過JavaScript來響應和處理這些事件,從而實現網頁的交互功能。事件處理是Web前端開發中實現動態交互的核心機制。 基本概…

Kafka面試精講 Day 10:事務機制與冪等性保證

【Kafka面試精講 Day 10】事務機制與冪等性保證 在分布式消息系統中,如何確保消息不丟失、不重復,是系統可靠性的核心挑戰。Kafka自0.11版本起引入了冪等性Producer和事務性消息機制,徹底解決了“至少一次”語義下可能產生的重復消息問題&am…

時序數據庫簡介和安裝

一、簡介1. 什么是時序數據庫?時序數據庫是專門用于存儲和處理時間序列數據的數據庫系統。時間序列數據是指按時間順序索引的一系列數據點。每個數據點都包含:一個時間戳:記錄數據產生的時間。一個或多個指標值:例如溫度、濕度、C…

comfyUI 暴露網絡restful http接口

https://zhuanlan.zhihu.com/p/686893291 暴露websocket接口。 打開開發者選項 如圖

linux系統address already in use問題解決

linux系統上某個端口被占用,如何解決?1.找到占用的進程編號:netstat -tulnp | grep :80002.強制殺死該進程kill -9 80603其他說明:1.查找占用端口的進程,可以用:lsof -i :8001 # 或者使用 netstat -tulnp |…

基于SpringBoot的家政保潔預約系統【計算機畢業設計選題 計算機畢業設計項目 計算機畢業論文題目推薦】

🍊作者:計算機編程-吉哥 🍊簡介:專業從事JavaWeb程序開發,微信小程序開發,定制化項目、 源碼、代碼講解、文檔撰寫、ppt制作。做自己喜歡的事,生活就是快樂的。 🍊心愿:點…

【Linux系統】 4. 權限(一)

一. shell 命令及運行原理基本理解1)廣義理解的操作系統包括:操作系統內核、外殼程序(shell命令行、圖形化界面)、必要的軟件。2)狹義的操作系統:操作系統內核。3)在用戶和內核之間有一個外殼程…

6.python——字符串

python中用’ 和" "創建字符串 python的子字符串截取用[]取字符串拼接可以直接用相加。 python三引號允許一個字符串跨多行,其中無需進行轉義(所見即所得)。 當你需要一塊HTML或者SQL時,這時用字符串組合,特…

足球數據API接口的技術特性與應用價值分析

一、接口概述現代足球數據接口是基于RESTful架構的數據服務,通過標準化方式提供賽事相關信息。這類接口通常采用JSON格式傳輸數據,支持跨平臺調用,為開發者提供結構化的足球賽事數據。二、數據覆蓋范圍主流足球數據接口通常包含以下數據類型&…

<android>反編譯魔改安卓系統應用并替換

我們知道安卓系統基于穩定性、維護便利、性能優化等原因并未對原生系統apk進行混淆加密處理,由此就方便了我們反編譯替換原生應用。 首先我們設備需要是root后的,我是使用的是小米5,刷的24.3版本的面具。首先我們需要取系統apk,這…

【Qt】項目的創建 and 各個控件的使用

一、項目的創建🔍然后點擊新建項目。📖注意:路徑不要帶有中文,不然運行不了代碼。📖qmake是一個構建工具,在 Qt 寫的程序,設計的到一系列的 "元編程" 技術,什么是元編程技…

大模型架構演進全景:從Transformer到下一代智能系統的技術路徑(MoE、Mamba/SSM、混合架構)

當前大模型發展正經歷著一個關鍵的技術分水嶺。雖然Transformer架構自2017年問世以來主導了整個AI領域,但我們正見證著多種創新架構的涌現,每種都在試圖解決Transformer的固有局限。本指南將系統性地解析當前主流架構的技術原理、適用場景與發展趨勢&…