JVM垃圾回收的目標(biāo):主要針對(duì)內(nèi)存中的堆空間進(jìn)行垃圾回收。
創(chuàng)新互聯(lián)建站專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站重做改版、黃石港網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為黃石港等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。Java中,大量的內(nèi)存都在堆中。
程序計(jì)數(shù)器:固定大小,不涉及釋放
棧:函數(shù)執(zhí)行完畢,對(duì)應(yīng)棧的空間就自動(dòng)釋放了,不需要垃圾回收
方法區(qū):類(lèi)對(duì)象加載時(shí)申請(qǐng)內(nèi)存,類(lèi)卸載時(shí)釋放內(nèi)存。操作低頻,不涉及垃圾回收。
JVM將堆分為三塊空間
正在使用的內(nèi)存一定不能釋放。
而不在使用,但是尚未回收的內(nèi)存中,一定需要回收。
一部分仍在使用的對(duì)象,一部分不在使用的對(duì)象,不進(jìn)行回收。
垃圾回收的基本單位是對(duì)象而不是字節(jié)。
垃圾回收的步驟:
判定不使用的內(nèi)存:
Ⅰ基于引用計(jì)數(shù):非Java中采用方案(Python)
針對(duì)每個(gè)對(duì)象,額外引入一塊內(nèi)存,保存這個(gè)對(duì)象有多少個(gè)引用指向它。
當(dāng)引用計(jì)數(shù)為0是就需要釋放這塊內(nèi)存。
缺點(diǎn):
1. 空間利用率低每個(gè)對(duì)象都有計(jì)數(shù)器,對(duì)象比較小時(shí),計(jì)數(shù)器占用空間比例大
2. 會(huì)出現(xiàn)類(lèi)似C++智能指針的循環(huán)引用問(wèn)題。
優(yōu)點(diǎn):簡(jiǎn)單容易實(shí)現(xiàn)。
Ⅱ基于可達(dá)性分析:JVM采取的方案
通過(guò)額外的線程,定期針對(duì)整個(gè)內(nèi)存空間進(jìn)行掃描。
從GCRoots,類(lèi)似深度優(yōu)先遍歷,將可以訪問(wèn)的對(duì)象進(jìn)行標(biāo)記。沒(méi)有被標(biāo)記的對(duì)象就是不可達(dá),需要釋放的空間。
GCRoots包括:
1. 棧上的局部變量
2. 常量池中引用指向的對(duì)象.
3. 方法區(qū)中的靜態(tài)成員指向的對(duì)象.
缺點(diǎn):如果內(nèi)存中的對(duì)象特別多,這個(gè)遍歷會(huì)很慢。系統(tǒng)開(kāi)銷(xiāo)大
優(yōu)點(diǎn):克服了引用計(jì)數(shù)的兩個(gè)缺點(diǎn)。
釋放垃圾內(nèi)存:三種基本策略
Ⅰ標(biāo)記-清除:可達(dá)性分析+直接釋放內(nèi)存
注意:如果直接釋放內(nèi)存,不同對(duì)象被釋放可能會(huì)導(dǎo)致內(nèi)存碎片。
為了解決內(nèi)存碎片,引入了復(fù)制算法:
將整體內(nèi)存分為兩部分,釋放內(nèi)存時(shí),將需要保存的數(shù)據(jù)連續(xù)復(fù)制到另一半內(nèi)存上,釋放內(nèi)存直接釋放一般內(nèi)存。這樣解決了內(nèi)存碎片。
復(fù)制算法問(wèn)題:
1. 內(nèi)存利用率低
2. 復(fù)制開(kāi)銷(xiāo)大
Ⅱ 標(biāo)記-整理:類(lèi)似于順序表刪除中間元素,會(huì)將后面的元素拷貝到中間的內(nèi)存碎片,從而解決內(nèi)存碎片
缺點(diǎn):
1. 搬運(yùn)元素開(kāi)銷(xiāo)大。
Ⅲ分代回收:對(duì)上述方案就行結(jié)合
根據(jù)垃圾回收周期將對(duì)象進(jìn)行分類(lèi):
一個(gè)對(duì)象經(jīng)過(guò)一輪GC掃描,這個(gè)對(duì)象的垃圾回收周期+1
針對(duì)不同時(shí)間周期的對(duì)象進(jìn)行不同的處理:首先將內(nèi)存分為下圖
1. 剛創(chuàng)建的對(duì)象放到Eden區(qū)
2. Eden區(qū)的對(duì)象經(jīng)過(guò)一輪GC掃描,會(huì)被拷貝到幸存區(qū)(應(yīng)用復(fù)制算法)
大部分對(duì)象會(huì)在經(jīng)過(guò)一輪GC掃描后被銷(xiāo)毀,很少一部分會(huì)被拷貝到幸存區(qū)。
3. 后序的幾輪GC中,幸存區(qū)之間的對(duì)象在兩個(gè)幸存區(qū)之間來(lái)回拷貝
4. 持續(xù)若干輪后,進(jìn)入內(nèi)存老年區(qū)。(這個(gè)對(duì)象不會(huì)釋放的概率很大)
老年代的GC掃描概率比較低
老年代內(nèi)存使用標(biāo)記-整理的方式進(jìn)行內(nèi)存回收。
在分代回收中,有個(gè)特殊情況:占用內(nèi)存大的對(duì)象會(huì)直接進(jìn)入老年區(qū)。
因?yàn)榇髮?duì)象拷貝成本大,不適合使用拷貝算法。
JVM垃圾回收器:在JVM中,真正實(shí)現(xiàn)上數(shù)算法的模塊,稱為垃圾回收器。
歷史的垃圾回收器:
Serial回收器:串行垃圾回收器(掃描時(shí)業(yè)務(wù)線需要停止工作)
Parallel old回收器:引入多線程,并發(fā)垃圾回收器(垃圾掃描時(shí),業(yè)務(wù)線不需要停止)
CMS回收器:盡可能讓STW時(shí)間短
可達(dá)性分析階段:
①初始標(biāo)記:找GCRoots速度快,STW短
②并發(fā)標(biāo)記:速度慢,但是于業(yè)務(wù)線并發(fā)執(zhí)行,無(wú)STW
③重新標(biāo)記:業(yè)務(wù)代碼可能重新影響并發(fā)標(biāo)記結(jié)果,這里進(jìn)行微調(diào)
內(nèi)存釋放階段:使用標(biāo)記整理法。
G1垃圾回收器:
給內(nèi)存分成很多區(qū)域Region,給這些Region進(jìn)行不同標(biāo)記,給這些區(qū)域不同標(biāo)記區(qū)分不同區(qū)域。在掃描中,一次掃描若干區(qū)域,不全部掃描。這樣基本不影響業(yè)務(wù)代碼
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:JavaEE-JVM八股文(JVM垃圾回收機(jī)制GC)-創(chuàng)新互聯(lián)
文章起源:http://aaarwkj.com/article24/ccccje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、定制開(kāi)發(fā)、網(wǎng)站維護(hù)、網(wǎng)站排名、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)