JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

這篇文章主要講解了“JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理”吧!

在溫嶺等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,溫嶺網(wǎng)站建設(shè)費(fèi)用合理。

本文的主要內(nèi)容如下:

  • 內(nèi)存模型

  • 垃圾回收

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

各部分的功能

這幾個(gè)存儲(chǔ)區(qū)最主要的就是棧區(qū)和堆區(qū),那么什么是棧什么是堆呢?說的簡(jiǎn)單點(diǎn),棧里面存放的是基本的數(shù)據(jù)類型和引用,而堆里面則是存放各種對(duì)象實(shí)例的。
JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

堆與棧分開設(shè)計(jì)是為什么呢?

  • 棧存儲(chǔ)了處理邏輯、堆存儲(chǔ)了具體的數(shù)據(jù),這樣隔離設(shè)計(jì)更為清晰

  • 堆與棧分離,使得堆可以被多個(gè)棧共享。

  • 棧保存了上下文的信息,因此只能向上增長(zhǎng);而堆是動(dòng)態(tài)分配

棧的大小可以通過-XSs設(shè)置,如果不足的話,會(huì)引起java.lang.StackOverflowError的異常

棧區(qū)

線程私有,生命周期與線程相同。每個(gè)方法執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)棧幀(stack frame)用于存放 局部變量表、操作棧、動(dòng)態(tài)鏈接、方法出口。

存放對(duì)象實(shí)例,所有的對(duì)象的內(nèi)存都在這里分配。垃圾回收主要就是作用于這里的。

  • 堆得內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;最大的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。

  • 默認(rèn)空余的堆內(nèi)存小于40%時(shí),就會(huì)增大,直到-Xmx設(shè)置的內(nèi)存。具體的比例可以由-XX:MinHeapFreeRatio指定

  • 空余的內(nèi)存大于70%時(shí),就會(huì)減少內(nèi)存,直到-Xms設(shè)置的大小。具體由-XX:MaxHeapFreeRatio指定。

因此一般都建議把這兩個(gè)參數(shù)設(shè)置成一樣大,可以避免JVM在不斷調(diào)整大小。

程序計(jì)數(shù)器

這里記錄了線程執(zhí)行的字節(jié)碼的行號(hào),在分支、循環(huán)、跳轉(zhuǎn)、異常、線程恢復(fù)等都依賴這個(gè)計(jì)數(shù)器。

方法區(qū)

類型信息、字段信息、方法信息、其他信息

總結(jié)

棧區(qū)線程私有,使用一段連續(xù)的內(nèi)存空間存放局部變量表、操作棧、動(dòng)態(tài)鏈接、方法出口-XSsStackOverflowError OutOfMemoryError
線程共享,生命周期與虛擬機(jī)相同保存對(duì)象實(shí)例-Xms -Xmx -XmnOutOfMemoryError
程序計(jì)數(shù)器線程私有、占用內(nèi)存小字節(jié)碼行號(hào)
方法區(qū)線程共享存儲(chǔ)類加載信息、常量、靜態(tài)變量等-XX:PermSize -XX:MaxPermSizeOutOfMemoryError

如何定義垃圾

有兩種方式,一種是引用計(jì)數(shù)(但是無法解決循環(huán)引用的問題);另一種就是可達(dá)性分析。

判斷對(duì)象可以回收的情況:

  • 顯示的把某個(gè)引用置位NULL或者指向別的對(duì)象

  • 局部引用指向的對(duì)象

  • 弱引用關(guān)聯(lián)的對(duì)象

垃圾回收的方法

Mark-Sweep標(biāo)記-清除算法

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

這種方法優(yōu)點(diǎn)就是減少停頓時(shí)間,但是缺點(diǎn)是會(huì)造成內(nèi)存碎片。

Copying復(fù)制算法

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

這種方法不涉及到對(duì)象的刪除,只是把可用的對(duì)象從一個(gè)地方拷貝到另一個(gè)地方,因此適合大量對(duì)象回收的場(chǎng)景,比如新生代的回收。

Mark-Compact標(biāo)記-整理算法

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

這種方法可以解決內(nèi)存碎片問題,但是會(huì)增加停頓時(shí)間。

Generational Collection 分代收集

最后的這種方法是前面幾種的合體,即目前JVM主要采取的一種方法,思想就是把JVM分成不同的區(qū)域。每種區(qū)域使用不同的垃圾回收方法。

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

上面可以看到堆分成三個(gè)區(qū)域:

  • 新生代(Young Generation):用于存放新創(chuàng)建的對(duì)象,采用復(fù)制回收方法,如果在s0和s1之間復(fù)制一定次數(shù)后,轉(zhuǎn)移到年老代中。這里的垃圾回收叫做minor GC;

  • 年老代(Old Generation):這些對(duì)象垃圾回收的頻率較低,采用的標(biāo)記整理方法,這里的垃圾回收叫做 major GC。

  • 永久代(Permanent Generation):存放Java本身的一些數(shù)據(jù),當(dāng)類不再使用時(shí),也會(huì)被回收。

這里可以詳細(xì)的說一下新生代復(fù)制回收的算法流程:

在新生代中,分為三個(gè)區(qū):Eden, from survivor, to survior。

  • 當(dāng)觸發(fā)minor GC時(shí),會(huì)先把Eden中存活的對(duì)象復(fù)制到to Survivor中;

  • 然后再看from survivor,如果次數(shù)達(dá)到年老代的標(biāo)準(zhǔn),就復(fù)制到年老代中;如果沒有達(dá)到則復(fù)制到to survivor中,如果to survivor滿了,則復(fù)制到年老代中。

  • 然后調(diào)換from survivor 和 to survivor的名字,保證每次to survivor都是空的等待對(duì)象復(fù)制到那里的。

垃圾回收器

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

串行收集器 Serial

這種收集器就是以單線程的方式收集,垃圾回收的時(shí)候其他線程也不能工作。
JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

并行收集器 Parallel

以多線程的方式進(jìn)行收集
JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

并發(fā)標(biāo)記清除收集器 Concurrent Mark Sweep Collector, CMS

大致的流程為:初始標(biāo)記--并發(fā)標(biāo)記--重新標(biāo)記--并發(fā)清除

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

G1收集器 Garbage First Collector

大致的流程為:初始標(biāo)記--并發(fā)標(biāo)記--最終標(biāo)記--篩選回收

JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理

感謝各位的閱讀,以上就是“JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

當(dāng)前題目:JVM內(nèi)存模型與垃圾回收知識(shí)點(diǎn)整理
文章路徑:http://muchs.cn/article46/pdheeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作、網(wǎng)站建設(shè)、Google、網(wǎng)站收錄、服務(wù)器托管

廣告

聲明:本網(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)

網(wǎng)站托管運(yùn)營(yíng)