本篇內(nèi)容主要講解“怎么使用Java垃圾回收算法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么使用Java垃圾回收算法”吧!
宿遷網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
引用計(jì)數(shù)法:在Java中,引用和對(duì)象是有關(guān)聯(lián)的。如果要操作對(duì)象則必須用引用進(jìn)行。因此,很顯然一個(gè)簡(jiǎn)單的辦法是通過引用計(jì)數(shù)來判斷一個(gè)對(duì)象是否可以回收。簡(jiǎn)單說,即一個(gè)對(duì)象如果沒有任何與之關(guān)聯(lián)的引用,即他們的引用計(jì)數(shù)都不為0,則說明對(duì)象不太可能再被用到,那么這個(gè)對(duì)象就是可回收對(duì)象。
可達(dá)性分析:為了解決引用計(jì)數(shù)法的循環(huán)引用問題,Java使用了可達(dá)性分析的方法。通過一系列“GC roots”對(duì)象作為起點(diǎn)搜索。如果在“GC roots”和一個(gè)對(duì)象之間沒有可達(dá)路徑,則稱該對(duì)象是不可達(dá)的。要注意的是,不可達(dá)對(duì)象不等價(jià)于可回收對(duì)象,不可達(dá)對(duì)象變?yōu)榭苫厥諏?duì)象至少要經(jīng)過兩次標(biāo)記過程。兩次標(biāo)記后仍然是可回收對(duì)象,則將面臨回收。
垃圾回收算法
標(biāo)記清除算法(Mark-Sweep)最基礎(chǔ)的垃圾回收算法,分為兩個(gè)階段,標(biāo)注和清除。標(biāo)記階段標(biāo)記出所有需要回收的對(duì)象,清除階段回收被標(biāo)記的對(duì)象所占用的空間。該算法最大的問題是內(nèi)存碎片化嚴(yán)重,后續(xù)可能發(fā)生大對(duì)象不能找到可利用空間的問題。
復(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)生碎片,但是最大的問題是可用內(nèi)存被壓縮到了原本的一半。且存活對(duì)象增多的話,Copying 算法的效率會(huì)大大降低。
分代收集算法分代收集法是目前大部分JVM所采用的方法,其核心思想是根據(jù)對(duì)象存活的不同生命周期將內(nèi)存劃分為不同的域,一般情況下將GC堆劃分為老生代(Tenured/Old Generation)和新生代(Young Generation)。老生代的特點(diǎn)是每次垃圾回收時(shí)只有少量對(duì)象需要被回收,新生代的特點(diǎn)是每次垃圾回收時(shí)都有大量垃圾需要被回收,因此可以根據(jù)不同區(qū)域選擇不同的算法。
新生代與復(fù)制算法
目前大部分JVM的GC對(duì)于新生代都采取Copying算法,因?yàn)樾律忻看卫厥斩家厥沾蟛糠謱?duì)象,即要復(fù)制的操作比較少,但通常并不是按照1:1來劃分新生代。一般將新生代劃分為一塊較大的Eden空間和兩個(gè)較小的Survivor空間(From Space, To Space),每次使用Eden空間和其中的一塊Survivor空間,當(dāng)進(jìn)行回收時(shí),將該兩塊空間中還存活的對(duì)象復(fù)制到另一塊Survivor空間中。
老年代與標(biāo)記復(fù)制算法
老年代因?yàn)槊看沃换厥丈倭繉?duì)象,因而采用Mark-Compact算法。
(1)Java虛擬機(jī)提到過的處于方法區(qū)的永生代(Permanet Generation),它用來存儲(chǔ)class類,常量,方法描述等。對(duì)永生代的回收主要包括廢棄常量和無用的類。
(2)對(duì)象的內(nèi)存分配主要在新生代的Eden Space和Survivor Space的From Space(Survivor 目前存放對(duì)象的那一塊),少數(shù)情況會(huì)直接分配到老生代。
(3)當(dāng)新生代的Eden Space和 From Space空間不足時(shí)就會(huì)發(fā)生一次GC,進(jìn)行GC后,Eden Space和From Space區(qū)的存活對(duì)象會(huì)被挪到To Space,然后將Eden Space和From Space進(jìn)行清理。
(4)如果To Space無法足夠存儲(chǔ)某個(gè)對(duì)象,則將這個(gè)對(duì)象存儲(chǔ)到老生代。
(5)在進(jìn)行GC后,使用的便是Eden Space和To Space了,如此反復(fù)循環(huán)。
(6)當(dāng)對(duì)象在Survivor區(qū)躲過一次GC后,其年齡就會(huì)+1。默認(rèn)情況下年齡到達(dá)15的對(duì)象會(huì)被移到老生代中。
到此,相信大家對(duì)“怎么使用Java垃圾回收算法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)站題目:怎么使用Java垃圾回收算法
轉(zhuǎn)載來于:http://sd-ha.com/article36/ggscsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)站維護(hù)、品牌網(wǎng)站制作、網(wǎng)站導(dǎo)航、營銷型網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)