欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:JVM 垃圾回收分配及算法

柚子快報(bào)邀請(qǐng)碼778899分享:JVM 垃圾回收分配及算法

http://yzkb.51969.com/

一、判斷對(duì)象是否可以回收

垃圾收集器在做垃圾回收的時(shí)候,首先需要判定的就是哪些內(nèi)存是需要被回收 的,哪些對(duì)象是「存活」的,是不可以被回收的;哪些對(duì)象已經(jīng)「死掉」了,需 要被回收。 一般有兩種方法來(lái)判斷:

????????引用計(jì)數(shù)器法:為每個(gè)對(duì)象創(chuàng)建一個(gè)引用計(jì)數(shù),有對(duì)象引用時(shí)計(jì)數(shù)器 +1,引用被釋放時(shí)計(jì)數(shù) -1,當(dāng)計(jì)數(shù)器為 0 時(shí)就可以被回收。它有一個(gè)缺點(diǎn)不能解決循環(huán)引用的問(wèn)題;

????????可達(dá)性分析算法:從 GC Roots 開(kāi)始向下搜索,搜索所走過(guò)的路徑稱為引用鏈。 當(dāng)一個(gè)對(duì)象到 GC Roots 沒(méi)有任何引用鏈相連時(shí),則證明此對(duì)象是可以被回收的。

二、堆空間分配年輕代老年代及對(duì)應(yīng)回收算法

堆主要用于存放各種類的實(shí)例對(duì)象和數(shù)組。在java中被分為兩個(gè)區(qū)域:年輕代和老年代。?

年輕代和老年代的劃分是為了更好的內(nèi)存分派及回收。提高效率。堆是垃圾回收機(jī)制的重點(diǎn)區(qū)域。我們知道垃圾回收機(jī)制有三種,minor gc,major gc 和full gc。針對(duì)于堆的就是前兩種。年輕代的叫 minor gc,老年代的叫major gc。?

1. 年輕代

年輕代中存在的對(duì)象是死亡非??斓?,存在朝生夕死的情況。尺寸隨堆大小的增加和減少而相應(yīng)的變化,默認(rèn)值是保持為堆的1/15。所以為了提高年輕代的垃圾回收效率,又將年輕代劃分為三個(gè)區(qū)域:?Eden區(qū)、SurvivorFrom區(qū)、SurvivorTo區(qū)。

eden和survivor默認(rèn)比例是8:1:1,進(jìn)行垃圾回收采用的是分代復(fù)制算法(優(yōu)點(diǎn)是避免內(nèi)存碎片)。新創(chuàng)建的對(duì)象都會(huì)被分配到Eden區(qū)(如果該對(duì)象占用內(nèi)存非常大,則直接分配到老年代區(qū)),當(dāng)Eden區(qū)內(nèi)存不夠的時(shí)候就會(huì)觸發(fā)MinorGC(Survivor滿不會(huì)引發(fā)MinorGC,而是將對(duì)象移動(dòng)到老年代中),?每次新生代的使用,會(huì)是eden區(qū)和一塊survivor區(qū)。當(dāng)我們進(jìn)行垃圾回收的時(shí)候,清除正在使用的區(qū)域,將其中的存貨對(duì)象,放入到另一個(gè)survivor區(qū)域,并進(jìn)行整理,保證空間的連續(xù)。如果對(duì)象長(zhǎng)時(shí)間存活,則將對(duì)象移動(dòng)到老年區(qū)。“From”區(qū)和“To”區(qū)互換角色,原Survivor To成為下一次GC時(shí)的Survivor From區(qū), 總之,GC后,都會(huì)保證Survivor To區(qū)是空的。存活下來(lái)的對(duì)象,他的年齡會(huì)增長(zhǎng)1。當(dāng)對(duì)象的年齡一次次存活,一次次增長(zhǎng),到達(dá)15的時(shí)候,這些對(duì)象就會(huì)移步到老年代。在年輕代執(zhí)行g(shù)c的時(shí)候,如果老年代的連續(xù)空間小于新生代對(duì)象的總大小,就會(huì)觸發(fā)一次full gc。是為了給新生代做擔(dān)保,保證新生代的老年對(duì)象可以順利的進(jìn)入到老年代的內(nèi)存區(qū)。

2. 老年代

隨著Minor GC的持續(xù)進(jìn)行,老年代中對(duì)象(年齡大于15的對(duì)象)也會(huì)持續(xù)增長(zhǎng),導(dǎo)致老年代的空間也會(huì)不夠用,最終會(huì)執(zhí)行Major GC(或full gc)(MajorGC 的速度比 Minor GC 慢很多很多,據(jù)說(shuō)10倍左右),full gc會(huì)包含年輕代的gc。但老年代只要執(zhí)行g(shù)c就一定是full gc。full gc使用的算法是:標(biāo)記清除(回收)算法或標(biāo)記壓縮算法。

標(biāo)記無(wú)用對(duì)象,然后進(jìn)行清除回收。 標(biāo)記-清除算法(Mark-Sweep)是一種常見(jiàn)的基礎(chǔ)垃圾收集算法,當(dāng)進(jìn)行標(biāo)記清除時(shí),會(huì)停止整個(gè)程序(stop the world),它將垃圾收集分為兩個(gè)階段:

????????標(biāo)記階段:從根節(jié)點(diǎn)開(kāi)始遍歷,標(biāo)記所有被引用的對(duì)象,一般在對(duì)象的header中標(biāo)記為可達(dá)對(duì)象。

????????清除階段:collector對(duì)堆內(nèi)存從頭到尾進(jìn)行線性遍歷,如果發(fā)現(xiàn)某個(gè)對(duì)象的header沒(méi)有標(biāo)記為可達(dá)對(duì)象,則回收?。這里的回收是把對(duì)象的地址保存在空閑的地址列表中(內(nèi)存分配),下次對(duì)象需要加載時(shí),判斷垃圾的位置空間是否夠,如果夠就存放覆蓋原有的地址。

優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,不需要對(duì)象進(jìn)行移動(dòng)。

缺點(diǎn):標(biāo)記、清除過(guò)程效率低,產(chǎn)生大量不連續(xù)的內(nèi)存碎片,提高了垃圾回收的頻率。?

3.?永久代(元空間)

在Java8中,永久代已經(jīng)被移除,被一個(gè)稱為“元數(shù)據(jù)區(qū)”(元空間,Metaspace)的區(qū)域所取代。 值得注意的是:元空間并不在虛擬機(jī)中,而是使用本地內(nèi)存(之前,永久代是在jvm中)。這樣,解決了以前永久代的OOM問(wèn)題,元數(shù)據(jù)和class對(duì)象存在永久代中,容易出現(xiàn)性能問(wèn)題和內(nèi)存溢出,畢竟是和老年代共享堆空間。java8后,永久代升級(jí)為元空間獨(dú)立后,也降低了老年代GC的復(fù)雜度。

元空間也是對(duì)java虛擬機(jī)的方法區(qū)的一種實(shí)現(xiàn)。元空間與永久代最大的區(qū)別在于,元空間不在虛擬機(jī)中,使用本地內(nèi)存。通過(guò)配置如下參數(shù)可以更改元空間的大小。 ????????-XX:MetaspaceSize:初始空間的大小。達(dá)到該值就會(huì)觸發(fā)垃圾收集進(jìn)行類型卸載,同時(shí)GC會(huì)對(duì)該值進(jìn)行調(diào)整:如果釋放了大量的空間,就適當(dāng)降低該值;如果釋放了很少的空間,那么在不超過(guò)MaxMetaspaceSize時(shí),適當(dāng)提高該值。 ????????-XX:MaxMetaspaceSize,最大空間,默認(rèn)是沒(méi)有限制的。 永久代的回收會(huì)隨著full gc進(jìn)行移動(dòng),消耗性能。每種類型的垃圾回收都需要特殊處理元數(shù)據(jù)。將元數(shù)據(jù)剝離出來(lái),簡(jiǎn)化了垃圾收集,提高了效率。

三、其他垃圾回收算法

1.?復(fù)制算法(年輕代使用)

為了解決標(biāo)記-清除算法的效率不高的問(wèn)題,產(chǎn)生了復(fù)制算法。它把內(nèi)存空間劃為兩個(gè)相等的區(qū)域,每次只使用其中一個(gè)區(qū)域。垃圾收集時(shí),遍歷當(dāng)前使用的區(qū)域,把存活對(duì)象復(fù)制到另外一個(gè)區(qū)域中,最后將當(dāng)前使用的區(qū)域的可回收的對(duì)象進(jìn)行回收。

優(yōu)點(diǎn):按順序分配內(nèi)存即可,實(shí)現(xiàn)簡(jiǎn)單、運(yùn)行高效,不用考慮內(nèi)存碎片。

缺點(diǎn):可用的內(nèi)存大小縮小為原來(lái)的一半,對(duì)象存活率高時(shí)會(huì)頻繁進(jìn)行復(fù)制。

2. 標(biāo)記-整理算法(標(biāo)記壓縮算法)

在新生代中可以使用復(fù)制算法,但是在老年代就不能選擇復(fù)制算法了,因?yàn)槔夏甏膶?duì)象存活率會(huì)較高,這樣會(huì)有較多的復(fù)制操作,導(dǎo)致效率變低。標(biāo)記-清除算法可以應(yīng)用在老年代中,但是它效率不高,在內(nèi)存回收后容易產(chǎn)生大量?jī)?nèi)存碎 片。因此就出現(xiàn)了一種標(biāo)記-整理算法(Mark-Compact)算法,與標(biāo)記-清除算法不同的是,在標(biāo)記可回收的對(duì)象后將所有存活的對(duì)象壓縮到內(nèi)存的一端,使他們緊湊的排列在一起,然后對(duì)端邊界以外的內(nèi)存進(jìn)行回收?;厥蘸螅延煤臀从玫膬?nèi)存都各自一邊。

優(yōu)點(diǎn):解決了標(biāo)記-清理算法存在的內(nèi)存碎片問(wèn)題。

缺點(diǎn):仍需要進(jìn)行局部對(duì)象移動(dòng),一定程度上降低了效率。

參考:

JVM年輕代,老年代,永久代詳解 - 經(jīng)典雞翅 - 博客園 (cnblogs.com)

jvm之年輕代(新生代)、老年代、永久代以及GC原理詳解_老年代空間多大-CSDN博客

柚子快報(bào)邀請(qǐng)碼778899分享:JVM 垃圾回收分配及算法

http://yzkb.51969.com/

精彩鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19026309.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄