最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JVM的垃圾處理機(jī)制詳解

 更新時間:2025年09月28日 09:04:28   作者:三傻317  
JVM通過可達(dá)性分析確定垃圾對象,采用分代收集策略:新生代用復(fù)制算法(Eden+Survivor),老年代用標(biāo)記-整理,現(xiàn)代收集器如G1兼顧吞吐與延遲,ZGC/Shenandoah實(shí)現(xiàn)超低延遲,適用于不同場景

JVM的垃圾處理機(jī)制

一、垃圾回收的流程

JVM 的垃圾回收(Garbage Collection, GC)大體分為兩步:

  1. 可達(dá)性分析(找到誰是垃圾)
  2. 垃圾回收算法(使用合適的算法處理垃圾)

二、可達(dá)性分析

可達(dá)性分析用來判斷一個對象是否還存活。

JVM 會從一些 GC Roots(如虛擬機(jī)棧中的局部變量、方法區(qū)的靜態(tài)變量、本地方法棧中的引用等)開始向外搜索,如果能通過引用鏈找到某個對象,那么該對象就是“可達(dá)”的,不會被回收;反之,就是“垃圾”。

需要注意:對象被標(biāo)記為垃圾后,并不會立刻清除,而是等到下一次觸發(fā) GC 時才會被統(tǒng)一清理。

三、垃圾回收算法

常見的 GC 基礎(chǔ)算法有三種:

標(biāo)記-清除(Mark-Sweep)

  • 過程:先標(biāo)記所有存活對象,再清理未標(biāo)記的垃圾對象。
  • 缺點(diǎn):會產(chǎn)生 內(nèi)存碎片。

復(fù)制(Copying)

  • 過程:將存活對象復(fù)制到另一塊內(nèi)存區(qū)域,清空原區(qū)域。
  • 優(yōu)點(diǎn):速度快,沒有碎片。
  • 缺點(diǎn):理論上浪費(fèi)一半空間。
  • 實(shí)際 JVM 中,新生代采用 Eden + 兩個 Survivor 區(qū)(常見比例 8:1:1),大大提高了利用率。

標(biāo)記-整理(Mark-Compact)

  • 過程:標(biāo)記存活對象后,將它們移動到一邊,保持內(nèi)存連續(xù),再清理邊界之外的垃圾。
  • 優(yōu)點(diǎn):解決碎片問題。
  • 缺點(diǎn):移動對象需要額外開銷。

四、分代收集

不同算法各有優(yōu)劣,JVM 采用 分代收集(Generational GC) 的思想:

新生代

  • 大多數(shù)對象朝生夕死。
  • 使用 復(fù)制算法,快速回收。
  • 新生代進(jìn)一步劃分為 1 個 Eden 區(qū)2 個 Survivor 區(qū)。
  • 對象先分配在 Eden,經(jīng)過多次 Minor GC 存活下來的對象晉升到老年代。

老年代

  • 存放生命周期較長的對象。
  • 使用 標(biāo)記-整理算法(或標(biāo)記-清除 + 整理)。
  • 避免來回復(fù)制帶來的性能損耗。

大對象

  • 一些特別大的對象可能會直接分配到老年代,避免在新生代中頻繁復(fù)制。

五、現(xiàn)代 GC 收集器

在實(shí)際 JVM 中,基礎(chǔ)算法往往會被組合和優(yōu)化,形成不同的收集器:

1. Serial GC

  • 特點(diǎn):單線程,GC 時 Stop-The-World。
  • 算法:新生代用復(fù)制算法,老年代用標(biāo)記-整理。
  • 適用場景:小應(yīng)用、單核 CPU。

2. Parallel GC(吞吐量優(yōu)先)

  • 特點(diǎn):多線程并行回收,追求吞吐量最大化。
  • 適用場景:后臺計算、大數(shù)據(jù)處理。
  • 缺點(diǎn):GC 停頓仍然較長。

3. CMS(Concurrent Mark-Sweep)

  • 特點(diǎn):并發(fā)標(biāo)記和清除,減少停頓時間。
  • 算法:基于標(biāo)記-清除。
  • 優(yōu)點(diǎn):適合對延遲敏感的應(yīng)用(如 Web 服務(wù))。
  • 缺點(diǎn):會產(chǎn)生內(nèi)存碎片,吞吐量低于 Parallel GC;在 JDK 9 起被標(biāo)記為廢棄。

4. G1(Garbage-First)

  • 特點(diǎn):目前主流,JDK 9 之后默認(rèn)收集器。
  • 設(shè)計:堆被劃分為多個 Region,每次優(yōu)先回收垃圾最多的 Region。
  • 優(yōu)點(diǎn):兼顧吞吐量和低延遲,可預(yù)測停頓時間(如 -XX:MaxGCPauseMillis=200)。
  • 算法:新生代 → 復(fù)制;老年代 → 標(biāo)記-整理。

5. 其他新一代收集器

  • ZGC(JDK 11+):超低延遲,GC 停頓 < 10ms,支持 TB 級堆。
  • Shenandoah(JDK 12+):與 ZGC 類似,低延遲 GC。

總結(jié)

  • 新生代:復(fù)制算法(快速回收,大部分對象很快死亡)。
  • 老年代:標(biāo)記-整理(減少碎片,適合長期對象)。

常見收集器

  • 小應(yīng)用:Serial GC
  • 吞吐量優(yōu)先:Parallel GC
  • 低延遲:CMS(逐漸淘汰)、G1(主流)
  • 超大堆/超低延遲:ZGC、Shenandoah

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

应城市| 晋江市| 牡丹江市| 扎兰屯市| 林芝县| 潮州市| 厦门市| 那坡县| 自治县| 宜丰县| 保亭| 乡城县| 怀安县| 阿拉善左旗| 耿马| 博白县| 陕西省| 蒙阴县| 营山县| 平谷区| 淮北市| 桂平市| 万安县| 龙岩市| 济南市| 海盐县| 乐清市| 环江| 洪湖市| 海城市| 大埔区| 丰台区| 浦县| 利川市| 东阿县| 太湖县| 宜都市| 阿坝| 南陵县| 孟津县| 屯昌县|