您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)java中堆和垃圾回收機(jī)制的介紹,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
堆通常是一個(gè)可以被看做一棵樹(shù)的數(shù)組對(duì)象。堆中某個(gè)節(jié)點(diǎn)的值總是不大于或不小于其父節(jié)點(diǎn)的值;堆總是一棵完全二叉樹(shù)。將根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。常見(jiàn)的堆有二叉堆、斐波那契堆等。堆是非線性數(shù)據(jù)結(jié)構(gòu),相當(dāng)于一維數(shù)組,有兩個(gè)直接后繼。
堆又叫做 “GC堆,"由于現(xiàn)在收集器基本都采用分代收集算法,所以Java堆還可以細(xì)分為:新生代和老年代,比例是1:2;再細(xì)致一點(diǎn)新生代內(nèi)部又劃分為Eden區(qū)、Survivor區(qū),比例為8:1。
下圖顯示了堆的結(jié)構(gòu):
對(duì)象在堆中內(nèi)存的分配是有嚴(yán)格規(guī)定的,策略為:
對(duì)象優(yōu)先在新生代Eden區(qū)分配內(nèi)存;
大對(duì)象直接進(jìn)老年代,主要是長(zhǎng)字符串和數(shù)組這些需要大量連續(xù)內(nèi)存空間的對(duì)象;
長(zhǎng)期存活的對(duì)象進(jìn)入老年代。Eden區(qū)內(nèi)存不夠時(shí),JVM發(fā)起一次MinorGC,對(duì)象的年齡加一,默認(rèn)對(duì)象年齡到15時(shí)進(jìn)入老年代;
動(dòng)態(tài)年齡判定。相同年齡所有對(duì)象大小的總和大于 Survivor 空間的一半,大于等于該年齡的對(duì)象進(jìn)入老年代
新生代 GC指Minor GC,在新生代的進(jìn)行垃圾回收,頻繁且快。 老年代 GC(Major GC/Full GC)在老年代進(jìn)行垃圾回收,通常伴隨著至少一次的minor gc。速度慢。Full GC在如下幾種情況下都會(huì)被觸發(fā):
老年代空間不足;
方法區(qū)空間不足;
調(diào)用System.gc(),建議JVM進(jìn)行full gc;
長(zhǎng)期存活的對(duì)象轉(zhuǎn)入老年代,空間不足;
沒(méi)有足夠的連續(xù)空間分配給大對(duì)象;
新生代垃圾回收存活的對(duì)象太多,S1放不下,老年代擔(dān)保空間不足,擔(dān)保空間指的是老年代最大可用的連續(xù)空間是否大于新生代所有對(duì)象總空間。
堆里面幾乎放了所有的對(duì)象,那我們?cè)趺粗肋@些對(duì)象是否還有用呢?JVM提供了兩種方法來(lái)判定:
強(qiáng)引用,new出來(lái)的對(duì)象,垃圾回收器絕不會(huì)回收它;
軟引用,在系統(tǒng)將要發(fā)生OMM前會(huì)回收這些對(duì)象的內(nèi)存;
弱引用,垃圾收集器工作時(shí)只要發(fā)現(xiàn),馬上回收;
虛引用,形同虛設(shè),任何時(shí)候都可能被回收。
我們已經(jīng)知道對(duì)象什么時(shí)候被回收了,那如何回收呢?介紹四種最常用的垃圾回收算法:
垃圾收集算法是一種內(nèi)存回收的思想,具體的實(shí)現(xiàn)是垃圾收集器。簡(jiǎn)要介紹下常用的垃圾收集器:
serial串行收集器。單線程,垃圾回收的時(shí)候,必須暫停其他工作。新生復(fù)制,老年標(biāo)記整理。簡(jiǎn)單高效;
ParNew 收集器。serial的多線程版本;
Parallel Scavenge 收集器,復(fù)制算法的多線程收集器。注重吞吐量,cpu運(yùn)行代碼時(shí)間/cpu耗時(shí)總時(shí)間。新生復(fù)制,老年標(biāo)記整理;
Serial Old 收集器,老年代版本;
Parallel Old 收集器,Parallel Scavenge老年代版本;
CMS 收集器,注重最短時(shí)間停頓。并發(fā)收集器,垃圾收集線程與用戶線程(基本上)同時(shí)工作。 標(biāo)記清除算法
關(guān)于java中堆和垃圾回收機(jī)制的介紹就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。