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

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

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

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

一、垃圾回收的流程

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

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

二、可達(dá)性分析

可達(dá)性分析用來(lái)判斷一個(gè)對(duì)象是否還存活。

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

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

三、垃圾回收算法

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

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

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

復(fù)制(Copying)

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

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

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

四、分代收集

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

新生代

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

老年代

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

大對(duì)象

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

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

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

1. Serial GC

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

2. Parallel GC(吞吐量?jī)?yōu)先)

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

3. CMS(Concurrent Mark-Sweep)

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

4. G1(Garbage-First)

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

5. 其他新一代收集器

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

總結(jié)

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

常見(jiàn)收集器

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

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

相關(guān)文章

最新評(píng)論

宝兴县| 浏阳市| 灌阳县| 将乐县| 大石桥市| 夹江县| 安乡县| 齐齐哈尔市| 曲水县| 柳州市| 南汇区| 江孜县| 洪江市| 密山市| 门源| 尼玛县| 天全县| 宽甸| 吉安县| 南投市| 灵石县| 桐柏县| 左贡县| 鄂温| 台安县| 交城县| 德兴市| 辉县市| 靖西县| 石泉县| 阿巴嘎旗| 黄石市| 曲阜市| 丹江口市| 凌云县| 渭源县| 济宁市| 南陵县| 武宣县| 项城市| 太仓市|