日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JVM垃圾回收机制学习

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM垃圾回收机制学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、可回收對(duì)象判定方法

識(shí)別方式有兩種。一是,引用計(jì)數(shù)算法;二是,可達(dá)性分析。

第一種方法:引用計(jì)數(shù)算法。當(dāng)一個(gè)對(duì)象被引用時(shí),引用計(jì)數(shù)器加1,當(dāng)引用失效時(shí),引用計(jì)數(shù)器減1。當(dāng)一個(gè)對(duì)象的引用次數(shù)為0時(shí),表示這個(gè)對(duì)象是可以被回收的。這種方法的優(yōu)點(diǎn)是快和簡(jiǎn)單,只要將所有對(duì)象遍歷一遍便可,缺點(diǎn)是:如果對(duì)象之間存在循環(huán)引用,則無(wú)法回收。比如:對(duì)象A引用了B,B中也引用了A,如果除此之外沒(méi)有任何對(duì)象引用了A和B,很顯然AB是應(yīng)該被回收的,但是此時(shí)兩者的引用次數(shù)是1,這時(shí),JVM無(wú)法對(duì)AB進(jìn)行回收。

第二種方法:可達(dá)性分析。通過(guò)一系列被稱(chēng)為“gc roots”的對(duì)象作為起點(diǎn),從這些節(jié)點(diǎn)開(kāi)始向下進(jìn)行搜索,搜索所走過(guò)的路徑成為引用鏈。當(dāng)一個(gè)對(duì)象到“gc roots”之間沒(méi)有任何引用鏈相連時(shí),則該對(duì)象是不可達(dá)的,也就是可以回收的。這種方式可以解決循環(huán)調(diào)用的問(wèn)題,JVM中使用的是這種判定方法。

二、垃圾回收算法

垃圾回收算法有以下四種:

標(biāo)記-清除算法;
復(fù)制算法;
標(biāo)記-整理算法;
分代收集算法;

標(biāo)記-清除算法分為“標(biāo)記”和“清除”兩個(gè)階段,“標(biāo)記”階段將需要回收的對(duì)象標(biāo)記出來(lái),“清除”階段回收被標(biāo)記的對(duì)象。這是一種最基本的垃圾回收算法,后面很多種垃圾回收算法都是基于這種算法的不足改進(jìn)而得到的。這種回收方法的缺點(diǎn)是回收之后會(huì)產(chǎn)生大量?jī)?nèi)存碎片,因?yàn)榛厥者^(guò)程只是簡(jiǎn)單的釋放掉被標(biāo)記對(duì)象。內(nèi)存碎片太多的話,當(dāng)我們需要分配大內(nèi)存對(duì)象時(shí),無(wú)法找到連續(xù)的內(nèi)存空間,以致分配內(nèi)存失敗。

復(fù)制算法將內(nèi)存分成兩半,一半使用(在用內(nèi)存),一半不用(未用內(nèi)存)。標(biāo)記過(guò)程同上,只是在回收時(shí),把在用內(nèi)存中的未標(biāo)記對(duì)象復(fù)制到未用內(nèi)存中,然后把在用內(nèi)存統(tǒng)一全部回收。這種方法不會(huì)產(chǎn)生內(nèi)存碎片,但是相當(dāng)于把內(nèi)存容量減少了一半。在實(shí)際算法中,在用內(nèi)存和未用內(nèi)存往往不是對(duì)半分的,因?yàn)槿绻看吻謇淼臅r(shí)候,大部分對(duì)象都死了,只有少部分存活(實(shí)際上,下面的分代收集算法中的新生代就符合這樣的特點(diǎn)),那么,未用內(nèi)存只要很小就可以了。

標(biāo)記-整理算法也是由標(biāo)記-清除算法發(fā)展而來(lái),只是“清除”之后,會(huì)把內(nèi)存整理一遍,這樣就沒(méi)有碎片了。但是,這種算法要考慮一致性問(wèn)題,就是整理的過(guò)程中,標(biāo)記不能變動(dòng),這就相當(dāng)于虛擬機(jī)要暫停,等待內(nèi)存整理完畢再運(yùn)行,而整理過(guò)程還是挺耗時(shí)的。但是,如果對(duì)象存活的時(shí)間很長(zhǎng),存活率很高,每次清理都只有少部分對(duì)象死亡(實(shí)際上,下面的分代收集算法中的老生代就符合這樣的特點(diǎn)),那么,這種算法消耗的時(shí)間會(huì)大大減少。

分代收集算法,這是聽(tīng)得最多的一種算法了,就是將對(duì)象分為新生代和老生代,新生代對(duì)象的特點(diǎn)是存活時(shí)間短,存活率低,老生代剛好相反。根據(jù)新生代和老生代的特點(diǎn),對(duì)新生代使用復(fù)制算法,對(duì)老生代使用標(biāo)記整理算法。

總結(jié)

以上是生活随笔為你收集整理的JVM垃圾回收机制学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。