您好,歡迎來到賦能網(wǎng)!

GC是什么為什么要有GC

賦能網(wǎng) 2023-06-11 157

GC是指垃圾回收機(jī),當(dāng)一個(gè)對(duì)象不能再被后續(xù)程序所引用到時(shí),這個(gè)zhuan對(duì)象所占用的內(nèi)存空間就沒shu有存dao在的意義了,java虛擬機(jī)會(huì)不定時(shí)的去檢測內(nèi)存中這樣的對(duì)象,然后回收這塊內(nèi)存空間。

GC的基本原理:

對(duì)于程序員來說,用new關(guān)鍵字即在堆中分配了內(nèi)存,我們稱之為“可達(dá)”。對(duì)于GC來說,只要所有被引用的對(duì)象為null時(shí),我們稱之為“不可達(dá)”,就將進(jìn)行內(nèi)存的回收。

當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),GC開始監(jiān)控這個(gè)對(duì)象的大小、內(nèi)存地址及使用情況。GC采用有向圖的方式記錄和管理堆(heap)中的所有對(duì)象,通過這種方式可以明確哪些對(duì)象是可達(dá)的,哪些不是。當(dāng)確定為不可達(dá)時(shí),則對(duì)其進(jìn)行回收。

保證GC在不同平臺(tái)的實(shí)現(xiàn)問題,java規(guī)范對(duì)其很多行為沒有進(jìn)行嚴(yán)格的規(guī)定。對(duì)于采用什么算法,什么時(shí)候進(jìn)行回收等。

垃圾回收機(jī)制有很多種,包括:分代復(fù)制垃圾回收、標(biāo)記垃圾回收、增量垃圾回收等方式。標(biāo)準(zhǔn)的Java進(jìn)程既有棧又有堆。棧保存了原始型局部變量,堆保存了要?jiǎng)?chuàng)建的對(duì)象。Java平臺(tái)對(duì)堆內(nèi)存回收和再利用的基本算法被稱為標(biāo)記和清除,但是Java對(duì)其進(jìn)行了改進(jìn),采用“分代式垃圾收集”。這種方法會(huì)跟Java對(duì)象的生命周期將堆內(nèi)存劃分為不同的區(qū)域,在垃圾收集過程中,可能會(huì)將對(duì)象移動(dòng)到不同區(qū)域:

– 伊甸園(Eden):這是對(duì)象最初誕生的區(qū)域,并且對(duì)大多數(shù)對(duì)象來說,這里是它們唯一存在過的區(qū)域。

– 幸存者樂園(Survivor):從伊甸園幸存下來的對(duì)象會(huì)被挪到這里。

– 終身頤養(yǎng)園(Tenured):這是足夠老的幸存對(duì)象的歸宿。年輕代收集(Minor-GC)過程是不會(huì)觸及這個(gè)地方的。當(dāng)年輕代收集不能把對(duì)象放進(jìn)終身頤養(yǎng)園時(shí),就會(huì)觸發(fā)一次完全收集(Major-GC),這里可能還會(huì)牽扯到壓縮,以便為大對(duì)象騰出足夠的空間。

GC是什么為什么要有GC

與垃圾回收相關(guān)的JVM參數(shù):

  • -Xms / -Xmx — 堆的初始大小 / 堆的最大大小
  • -Xmn — 堆中年輕代的大小
  • -XX:-DisableExplicitGC — 讓System.gc()不產(chǎn)生任何作用
  • -XX:+PrintGCDetails — 打印GC的細(xì)節(jié)
  • -XX:+PrintGCDateStamps — 打印GC操作的時(shí)間戳
  • -XX:NewSize / XX:MaxNewSize — 設(shè)置新生代大小/新生代最大大小
  • -XX:NewRatio — 可以設(shè)置老生代和新生代的比例
  • -XX:PrintTenuringDistribution — 設(shè)置每次新生代GC后輸出幸存者樂園中對(duì)象年齡的分布
  • -XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:設(shè)置老年代閥值的初始值和最大值
  • -XX:TargetSurvivorRatio:設(shè)置幸存區(qū)的目標(biāo)使用率

了解更多java培訓(xùn)相關(guān)技術(shù)知識(shí)歡迎關(guān)注小編!

本文鏈接:

本文章“GC是什么為什么要有GC”已幫助 157 人

免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579

如果本頁不是您要找的課程,您也可以百度查找一下: