久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Java 并發(fā)編程解析 |Java GC垃圾回收

Java 并發(fā)編程解析 |Java GC垃圾回收

來(lái)源:千鋒教育
發(fā)布人:qyf
時(shí)間: 2022-08-03 15:03:41 1659510221

1

  Java 虛擬機(jī)提供了一系列的垃圾回收機(jī)制(Garbage Collection),又或者說(shuō)是垃圾回收器(Garbage Collector),其中常見(jiàn)的垃圾回收器如下:

  Serial GC(Serial Garbage Collection):第一代GC,是1999年在JDK1.3中發(fā)布的串行方式的單線程GC。一般適用于 最小化地使用內(nèi)存和并行開(kāi)銷的場(chǎng)景。

  Parallel GC(Parallel Garbage Collection):第二代GC,是2002年在JDK1.4.2中發(fā)布的,相比Serial GC,基于多線程方式加速運(yùn)行垃圾回收,在JDK6版本之后成為Hotspot VM的默認(rèn)GC。一般是最大化應(yīng)用程序的吞吐量。

  CMS GC(Concurrent Mark Sweep Garbage Collection ):第二代GC,是2002年在JDK1.4.2中發(fā)布的,相比Serial GC,基于多線程方式加速運(yùn)行垃圾回收,可以讓應(yīng)用程序和GC分享處理器資源的GC。一般是最小化GC的中斷和停頓時(shí)間的場(chǎng)景。

  G1 GC (Garbage First Garbage Collection):第三代GC,是JDK7版本中誕生的一個(gè)并行回收器,主要是針對(duì)“垃圾優(yōu)先”的原則而誕生的GC,也是時(shí)下我們比較新的GC。

  在常見(jiàn)的垃圾回收中,我們一般采用引用計(jì)數(shù)法和可達(dá)性分析兩種方式來(lái)確定垃圾是否產(chǎn)生,其中:

  引用計(jì)數(shù)法:在Java中,引用和對(duì)象是有關(guān)聯(lián)的。如果要操作對(duì)象則必須用引用進(jìn)行。因此,很顯然一個(gè)簡(jiǎn)單的辦法是通過(guò)引用計(jì)數(shù)來(lái)判斷一個(gè)對(duì)象是否可以回收。簡(jiǎn)單說(shuō),即一個(gè)對(duì)象如果沒(méi)有任何與之關(guān)聯(lián)的引用,即他們的引用計(jì)數(shù)都不為0,則說(shuō)明對(duì)象不太可能再被用到,那么這個(gè)對(duì)象就是可回收對(duì)象。

  可達(dá)性分析(根搜索算法):為了解決引用計(jì)數(shù)法的循環(huán)引用問(wèn)題,Java使用了可達(dá)性分析的方法。通過(guò)一系列的“GC roots”對(duì)象作為起點(diǎn)搜索。如果在“GC roots”和一個(gè)對(duì)象之間沒(méi)有可達(dá)路徑,則稱該對(duì)象是不可達(dá)的。要注意的是,不可達(dá)對(duì)象不等價(jià)于可回收對(duì)象,不可達(dá)對(duì)象變?yōu)榭苫厥諏?duì)象至少要經(jīng)過(guò)兩次標(biāo)記過(guò)程。兩次標(biāo)記后仍然是可回收對(duì)象,則將面臨回收。

  一般來(lái)說(shuō),當(dāng)成功區(qū)分出內(nèi)存中存活對(duì)象和死亡對(duì)象之后,GC接著就會(huì)執(zhí)行垃圾回收,釋放掉無(wú)用對(duì)象所占用的內(nèi)存空間,以便有足夠可用的內(nèi)存空間為新的對(duì)象分配內(nèi)存。

  目前,在JVM中采用的垃圾收集算法主要有:

  標(biāo)記-清除算法(Mark-Sweep ): 最基礎(chǔ)的垃圾回收算法,分為兩個(gè)階段,標(biāo)注和清除。標(biāo)記階段標(biāo)記出所有需要回收的對(duì)象,清除階段回收被標(biāo)記的對(duì)象所占用的空間。該算法最大的問(wèn)題是內(nèi)存碎片化嚴(yán)重,后續(xù)可能發(fā)生大對(duì)象不能找到可利用空間的問(wèn)題。

  復(fù)制算法(Copying): 為了解決Mark-Sweep算法內(nèi)存碎片化的缺陷而被提出的算法。按內(nèi)存容量將內(nèi)存劃分為等大小的兩塊。每次只使用其中一塊,當(dāng)這一塊內(nèi)存滿后將尚存活的對(duì)象復(fù)制到另一塊上去,把已使用的內(nèi)存清掉。這種算法雖然實(shí)現(xiàn)簡(jiǎn)單,內(nèi)存效率高,不易產(chǎn)生碎片,但是最大的問(wèn)題是可用內(nèi)存被壓縮到了原本的一半。且存活對(duì)象增多的話,Copying算法的效率會(huì)大大降低。

  標(biāo)記-壓縮算法(Mark-Compact): 為了避免缺陷而提出。標(biāo)記階段和Mark-Sweep算法相同,標(biāo)記后不是清理對(duì)象,而是將存活對(duì)象移向內(nèi)存的一端,然后清除端邊界外的對(duì)象。

  增量算法(Incremental Collecting): 也可以成為分區(qū)收集算法(Region Collenting),將整個(gè)堆空間劃分為連續(xù)的不同小區(qū)間, 每個(gè)小區(qū)間獨(dú)立使用, 獨(dú)立回收. 這樣做的好處是可以控制一次回收多少個(gè)小區(qū)間 , 根據(jù)目標(biāo)停頓時(shí)間, 每次合理地回收若干個(gè)小區(qū)間(而不是整個(gè)堆), 從而減少一次GC所產(chǎn)生的停頓。

  分代收集算法(Generational Collenting): 是目前大部分JVM所采用的方法,其核心思想是根據(jù)對(duì)象存活的不同生命周期將內(nèi)存劃分為不同的域,一般情況下將GC堆劃分為老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特點(diǎn)是每次垃圾回收時(shí)只有少量對(duì)象需要被回收,新生代的特點(diǎn)是每次垃圾回收時(shí)都有大量垃圾需要被回收,因此可以根據(jù)不同區(qū)域選擇不同的算法。

  更多關(guān)于“java培訓(xùn)”的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽(tīng)。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
服務(wù)器為什么要用Linux?

服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢(shì)和特點(diǎn)。包括其...詳情>>

2023-10-14 12:34:11
ORM解決的主要問(wèn)題是什么?

ORM(對(duì)象關(guān)系映射)解決的主要問(wèn)題是將關(guān)系數(shù)據(jù)庫(kù)與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)以表格的形式存儲(chǔ),而在面向?qū)ο?..詳情>>

2023-10-14 12:26:19
Go為什么不支持三元運(yùn)算符?

Go為什么不支持三元運(yùn)算符Go語(yǔ)言是一種以簡(jiǎn)潔和有效性為目標(biāo)的編程語(yǔ)言,因此在設(shè)計(jì)過(guò)程中,Go的設(shè)計(jì)者刻意排除了一些他們認(rèn)為可能導(dǎo)致復(fù)雜性或...詳情>>

2023-10-14 12:12:36
IT通常說(shuō)的平臺(tái)是什么意思?

在信息技術(shù)(IT)領(lǐng)域,”平臺(tái)”這個(gè)詞有著廣泛的含義,它常常指代支持軟件應(yīng)用開(kāi)發(fā)和運(yùn)行的基礎(chǔ)框架和環(huán)境。以下是對(duì)”平臺(tái)”這個(gè)概念的更深入...詳情>>

2023-10-14 11:55:36
什么是PowerPivot?

什么是PowerPivotPowerPivot,全稱”PowerPivot for Excel”,是Microsoft提供的一種數(shù)據(jù)分析工具,可以作為Excel的插件使用。通過(guò)PowerPivot,...詳情>>

2023-10-14 11:25:48