Java中怎么使用JVM實(shí)現(xiàn)內(nèi)存管理,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供金灣企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都做網(wǎng)站、成都網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為金灣眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
1. 查找失效對(duì)象
1.1 引用計(jì)數(shù)法
可以為每一個(gè)對(duì)象添加一個(gè)引用計(jì)數(shù)器,用于存儲(chǔ)當(dāng)前對(duì)象被幾處引用。
引用計(jì)數(shù)法簡(jiǎn)單高效,但無(wú)法解決循環(huán)引用問(wèn)題,如A引用B,B又引用A,且這兩個(gè)對(duì)象不再被其它對(duì)象引用,那么在使用引用計(jì)數(shù)法的情況下,這兩個(gè)對(duì)象的引用數(shù)均為1,且無(wú)法減至0。
1.2 可達(dá)性分析算法
可以通過(guò)一系列成為“GC Roots”的對(duì)象作為起始點(diǎn),并從這些節(jié)點(diǎn)向下搜索,當(dāng)一個(gè)對(duì)象到GC Roots不可達(dá),則證明該對(duì)象不可用。
圖1-1
GC Roots對(duì)象包括下面幾種:
o 虛擬機(jī)棧中引用的對(duì)象。
o 方法區(qū)中類(lèi)靜態(tài)屬性引用的對(duì)象。
o 方法區(qū)中常量引用的對(duì)象。
o 本地方法棧中引用的對(duì)象。
一個(gè)對(duì)象要真正被清理,至少需要兩次標(biāo)記過(guò)程。
1.3 回收方法區(qū)
方法區(qū)垃圾回收的效率與性?xún)r(jià)比都遠(yuǎn)低于堆內(nèi)存的回收。
主要回收兩部分:廢棄常量和無(wú)用的類(lèi)。
2. 垃圾收集算法
2.1 標(biāo)記-清除算法
圖2-1
標(biāo)記清除算法的標(biāo)記階段與清除階段效率都不高,且會(huì)產(chǎn)生大量?jī)?nèi)存碎片。
2.2 復(fù)制算法
圖2-2
將內(nèi)存平分為兩塊,每次只使用其中一塊。
當(dāng)一塊內(nèi)存快用完時(shí),可將存活的對(duì)象復(fù)制到另一塊上面,然后將剛才使用的內(nèi)存一次性清理掉。
該算法簡(jiǎn)單高效,且不會(huì)產(chǎn)生內(nèi)存碎片,但由于有一半空閑內(nèi)存,所以?xún)?nèi)存使用率不高。
HotSpot中,新生代內(nèi)存結(jié)構(gòu)為 1 * Eden + 2 * Survivor,每次只使用Eden區(qū)和其中一塊Survivor區(qū),當(dāng)發(fā)生回收時(shí),會(huì)將Eden與在用的Survivor中的存活對(duì)象復(fù)制到另一塊Survivor區(qū)中。
根據(jù)HotSpot的內(nèi)存結(jié)構(gòu),可見(jiàn)只有10%的內(nèi)存(其中一塊Survivor)被浪費(fèi),但此時(shí)有另一個(gè)問(wèn)題,即實(shí)際情況下我們不能保證每次回收的存活對(duì)象都僅占內(nèi)存的10%以下,所以當(dāng)Survivor也不夠用時(shí),就需要依賴(lài)其它內(nèi)存(老年代)做分配擔(dān)保。
2.3 標(biāo)記-整理算法
在對(duì)象存活率高的情況下,復(fù)制算法需要進(jìn)行較多的賦值操作,效率會(huì)變低,同時(shí)備用空間也是對(duì)內(nèi)存的一種浪費(fèi)。
對(duì)于老年代,可能存在所有對(duì)象都存活的情況,所以直接使用復(fù)制算法是不合適的,所以出現(xiàn)了標(biāo)記-整理算法。
圖2-3
看完上述內(nèi)容,你們掌握J(rèn)ava中怎么使用JVM實(shí)現(xiàn)內(nèi)存管理的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站欄目:Java中怎么使用JVM實(shí)現(xiàn)內(nèi)存管理
文章鏈接:http://aaarwkj.com/article12/gghgdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、域名注冊(cè)、ChatGPT、手機(jī)網(wǎng)站建設(shè)、用戶(hù)體驗(yàn)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)