JAVA編程【jvm垃圾回收的差異】

jvm垃圾回收的差異

JVM(Java Virtual Machine)的垃圾回收(GC)機制是自動管理內存的一種方式,能夠幫助開發者釋放不再使用的內存,避免內存泄漏和溢出等問題。不同的垃圾回收器(GC)有著不同的特點、適用場景以及性能差異。

1. 垃圾回收器分類

JVM垃圾回收器主要分為兩大類:

串行垃圾回收器(Serial GC)
并行垃圾回收器(Parallel GC)
并發垃圾回收器(Concurrent GC)
混合垃圾回收器(如:G1 GC)
ZGC 和 Shenandoah GC(低延遲垃圾回收器)

2. 串行垃圾回收器(Serial GC)

串行垃圾回收器是最簡單的垃圾回收器,所有的垃圾回收操作都是單線程完成的。

特點:

單線程執行:所有的垃圾回收操作(包括標記、清除、壓縮)都由一個線程來完成。
適用于單核機器:在多核機器上可能存在性能瓶頸,因回收過程阻塞應用線程。
低內存占用:由于只使用一個線程,內存占用較小。
GC暫停時間較長:因為所有的回收都由一個線程執行,可能導致應用程序的停頓時間較長。

適用場景:

內存資源較為緊張、硬件性能較差,或者單核環境。
小型應用或者對GC延遲要求不高的場景。

啟用方式:

java -XX:+UseSerialGC

3. 并行垃圾回收器(Parallel GC)

并行垃圾回收器通過多個線程來并行地執行垃圾回收過程,減少了垃圾回收的時間,適合多核環境。

特點:

多線程執行:垃圾回收過程中可以使用多個線程,并行執行標記、清理和整理操作。
吞吐量較高:能更好地利用多核CPU資源,適合計算密集型應用。
GC暫停時間較長:雖然多線程執行,但仍然是“停頓式”的,GC時應用線程會被暫停。

適用場景:

計算密集型應用(如批處理任務、大數據處理等)。
硬件資源豐富的服務器上,特別是在多核環境中。

啟用方式:

java -XX:+UseParallelGC

4. 并發垃圾回收器(Concurrent Mark-Sweep GC, CMS GC)

CMS(Concurrent Mark-Sweep)垃圾回收器是為了減少垃圾回收的停頓時間而設計的。它在標記和清理階段盡可能與應用線程并發執行。

特點:

低停頓:通過并發執行垃圾回收,尤其是在標記階段和清理階段,減少了應用停頓時間。
并發標記和清理:標記和清理過程與應用線程并行進行,因此GC停頓時間較短。
無法完全消除停頓:由于某些階段仍然需要停頓(如重標記階段),停頓時間不能完全消除。
內存碎片問題:由于沒有壓縮階段,可能會導致內存碎片的出現。

適用場景:

對延遲敏感的應用(如Web服務器、實時系統)。
對停頓時間要求較高的場景。

啟用方式:

java -XX:+UseConcMarkSweepGC

5. G1垃圾回收器(Garbage First GC)

G1(Garbage First)垃圾回收器是為大內存應用而設計的,它將堆劃分為多個區域(Region),在垃圾回收時會優先清理回收成本較低的區域,從而減少停頓時間。

特點:

分區回收:將堆劃分為多個小區域,每個區域都有不同的回收策略。
低停頓:通過優先回收成本較低的區域,控制每次垃圾回收的停頓時間。
混合回收:G1 采用了類似 CMS 的并發標記和清理,同時也進行并行回收,最后進行清理階段時也盡可能減少停頓。
可控的停頓時間:通過 -XX:MaxGCPauseMillis 可以設定最大GC停頓時間,G1會盡量保證在這個時間內完成回收。

適用場景:

對響應時間要求較高的大型應用(如大數據系統、金融應用)。
內存較大(如8GB以上)的應用。

啟用方式:

java -XX:+UseG1GC

6. ZGC 和 Shenandoah GC(低延遲垃圾回收器)

ZGC(Z Garbage Collector)和Shenandoah GC是兩種低延遲垃圾回收器,專門設計用于極低的GC暫停時間,適合對延遲要求非常高的應用。

特點:

低延遲:ZGC 和 Shenandoah 都是為低延遲設計的,暫停時間幾乎是常數級別的。
可伸縮性:兩者都支持大規模堆(數TB內存),并且能在不中斷應用的情況下進行垃圾回收。
并發標記和清理:標記、壓縮等工作幾乎都在應用線程運行時并發執行。

適用場景:

超低延遲要求的應用(如實時交易系統、在線支付系統)。
高可用、高并發的大型分布式應用。

啟用方式:

java -XX:+UseZGC
java -XX:+UseShenandoahGC

7. JVM 垃圾回收器的差異總結

在這里插入圖片描述

8. 選擇合適的垃圾回收器

HikariCP 或 Apache DBCP 等性能要求較高的應用通常選擇 并行GC 或 G1 GC。
對實時性要求較高的應用,如 金融系統 或 實時處理系統,可以使用 CMS GC、G1 GC 或 低延遲GC(ZGC/Shenandoah)。
內存較小、要求不高的小型應用可以選擇 串行GC。
每種垃圾回收器有其特點和適用場景,選擇合適的垃圾回收器不僅有助于優化應用性能,還能提高系統的穩定性和可維護性。

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

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

相關文章

親測解決筆記本觸摸板使用不了Touchpad not working

這個問題可以通過FnFxx來解決,筆記本鍵盤上Fxx會有一個觸摸板圖標。如果不行應該玉藻設置中關了,打開即可。 解決辦法 在藍牙,觸摸板里打開即可。 Turn it on in settings。

RAG技術深度解析:從基礎Agent到復雜推理Deep Search的架構實踐

重磅推薦專欄: 《大模型AIGC》 《課程大綱》 《知識星球》 本專欄致力于探索和討論當今最前沿的技術趨勢和應用領域,包括但不限于ChatGPT和Stable Diffusion等。我們將深入研究大型模型的開發和應用,以及與之相關的人工智能生成內容(AIGC)技術。通過深入的技術解析和實踐經…

數據結構篇——串(String)

一、引入 在計算機中的處理的數據內容大致可分為以整形、浮點型等的數值處理和字符、字符串等的非數值處理。 今天我們主要學習的就是字符串數據。本章主要圍繞“串的定義、串的類型、串的結構及其運算”來進行串介紹與學習。 二、串的定義 2.1、串的基本定義 串(s…

【智能體架構:Agent】LangChain智能體類型ReAct、Self-ASK的區別

1. 什么是智能體 將大語言模型作為一個推理引擎。給定一個任務, 智能體自動生成完成任務所需步驟, 執行相應動作(例如選擇并調用工具), 直到任務完成。 2. 先定義工具:Tools 可以是一個函數或三方 API也…

OmniParser技術分析(一)

1.引言 通過上篇文章介紹 OmniParser:下一代純視覺UI自動化測試先驅相信大家已經對OmniParser有初步了解,接下來詳細介紹下OmniParser使用了哪些技術模型實現了對UI純視覺的檢測和理解。 2.整體方案 通過閱讀OmniParser提供的運行Demo代碼知道,其實整…

設計心得——繼承和實例

一、繼承的應用場景 在上篇文章分析了繼承的應用,本文反過來講繼承和實例。可以理解對上文的繼承進行一下基礎知識的鋪墊,繼承的應用場景非常多,典型的應用場景包括: 1、單純屬性的繼承 這種繼承非常常見,在前面也舉過…

從連接到交互:SDN 架構下 OpenFlow 協議的流程與報文剖析

在SDN架構中,交換機與控制器之間的通信基于 OpenFlow協議,其設計目的是實現控制平面與數據平面的解耦。以下是 交換機連接控制器 和 數據包進入交換機觸發交互 的詳細流程及協議報文分析: 一、交換機連接控制器的流程(初始化階段&…

opentitan riscv

OpenTitan?是一個開源的硅根信任(Root of Trust, RoT)項目,旨在使硅RoT的設計和實現更加透明、可信和安全,適用于企業、平臺提供商和芯片制造商。該項目由lowRISC CIC管理,作為一個協作項目,旨在生產高質量…

R語言使用scitable包交互效應深度挖掘一個陌生數據庫

很多新手剛才是總是覺得自己沒什么可以寫的,自己不知道選什么題材進行分析,使用scitable包后這個完全不用擔心,選題多到你只會擔心你寫不完,寫得不夠快。 今天演示一下使用scitable包深度挖掘一個陌生數據庫 先導入R包和數據 li…

電腦內存智能監控清理,優化性能的實用軟件

軟件介紹 Memory cleaner是一款內存清理軟件。功能很強,效果很不錯。 Memory cleaner會在內存用量超出80%時,自動執行“裁剪進程工作集”“清理系統緩存”以及“用全部可能的方法清理內存”等操作,以此來優化電腦性能。 同時,我…

C#控制臺應用程序學習——3.8

一、語言概述 1、平臺相關性 C# 主要運行在.NET 平臺上。.NET 提供了一個龐大的類庫,C# 程序可以方便地調用這些類庫來實現各種功能,如文件操作、數據庫訪問、網絡通信等。 2、語法風格 C# 的語法與 C、C 和 Java 有一定的相似性。例如,它使用…

鴻蒙HarmonyOS-Navagation基本用法

Navagation基本用法 Navigation組件是路由導航的根視圖容器,一般作為Page頁面的根容器使用,其內部默認包含了標題欄,內容欄和公工具欄,其中內容區默認首頁顯示導航內容(Navigation的子組件)或非首頁顯示&am…

初階數據結構(C語言實現)——4.1棧

目錄 1.棧1.1棧的概念及結構1.2 棧的實現1.1.0 棧的初始化1.1.1 銷毀1.1.2 入棧1.1.3 出棧1.1.4 獲取棧中有效元素個數1.1.5 檢測棧是否為空,如果為空返回非零結果,如果不為空返回01.1.6 獲取棧頂元素1.1.7 驗證 附錄 棧的C語言實現源碼.h文件.c文件test…

計算光學成像與光學計算概論

計算光學成像所涉及研究的內容非常廣泛,雖然計算光學成像的研究內容是發散的,但目的都是一致的:如何讓相機記錄到客觀實物更豐富的信息,延伸并擴展人眼的視覺感知。總的來說,計算光學成像現階段已經取得了很多令人振奮…

什么樣的物聯網框架適合開展共享自助KTV唱歌項目?

現在物聯網的廣泛應用,也讓更多用戶們看到了它的實力,也使得共享經濟遍地開花。其中共享自助唱歌設備也備受歡迎,那么適合開展共享自助KTV唱歌項目的物聯網框架都應具備哪些特點呢? 智能化與自動化管理 物聯網技術在共享KTV中的應…

機器視覺選型中,不同焦距的鏡頭成像視野有什么不同?

不同焦距的鏡頭成像視野的差異主要體現在視角范圍和透視效果上。焦距越長,視角越窄,能捕捉的景物范圍越小;焦距越短,視角越廣,覆蓋的景物范圍越大。以下是具體分析: 焦距與視角的關系 焦距(Foc…

Linux16-數據庫、HTML

數據庫: 數據存儲: 變量、數組、鏈表-------------》內存 :程序運行結束、掉電數據丟失 文件 : 外存:程序運行結束、掉電數據不丟失 數據庫: …

開源訂貨系統哪個好 三大訂貨系統源碼推薦

在數字化轉型加速的今天,企業對訂貨系統的需求日益增長。一款優質的訂貨系統源碼不僅能提升供應鏈效率,還能通過二次開發滿足個性化業務需求。這里結合 “標準化、易擴展” 兩大核心要求,為您精選三款主流訂貨系統源碼,助您快速搭…

行為模式---迭代器模式

概念 迭代器模式是設計模式的行為模式,它的主要設計思想是提供一個可以操作聚合對象(容器或者復雜數據類型)表示(迭代器類)。通過迭代器類去訪問操作聚合對象可以隱藏內部表示,也可以使客戶端可以統一處理…

Maven的學習以及安裝配置 2024/3/1 idea

1. Maven的安裝 1.1 首先查看編程工具合適的Maven版本 我使用的是2024/3/1 版本的idea,接下來我會用這個版本的idea進行演示。idea沒有漢化的也可以參考我的步驟。 1、打開idea的設置,搜索Maven,進入Maven設置。 我們可以看到,…