學(xué)習(xí)筆記20170601">【PMP】學(xué)習(xí)筆記20170601
891
2025-03-31
通過上一篇文章的學(xué)習(xí),我們對(duì)JVM堆區(qū)有了初步的認(rèn)識(shí),接下來,我們繼續(xù)展開講解堆區(qū)。
24/ 64
草稿箱
代碼語言
7 秒后保存
上傳附件
縮略圖:
作為封面顯示在文章列表,可自定義設(shè)置
標(biāo)簽設(shè)置 :
請(qǐng)?zhí)砑訕?biāo)簽
文章摘要 :
0/ 200
內(nèi)容為空時(shí)默認(rèn)顯示文章前200字,您可以手動(dòng)更改
評(píng)論權(quán)限:
文章創(chuàng)作類型:
是否允許轉(zhuǎn)載:
免責(zé)聲明:
用戶承諾,發(fā)表的文章不存在任何知識(shí)產(chǎn)權(quán)問題并自行承擔(dān)全部責(zé)任,華為云社區(qū)可配合權(quán)利人進(jìn)行必要的維權(quán)配合工作。
發(fā)表? 保存草稿? 預(yù)覽? 草稿箱
售前咨詢熱線
950808-1
技術(shù)服務(wù)咨詢
售前咨詢
備案服務(wù)
云市場(chǎng)咨詢
法律聲明
隱私政策
版權(quán)所有 ? 華為軟件技術(shù)有限公司 2020? 保留一切權(quán)利? 蘇ICP備17040376號(hào)-32? 蘇B2-20130048號(hào)? 代理域名注冊(cè)服務(wù)機(jī)構(gòu):新網(wǎng)
蘇公網(wǎng)安備 32011402010636號(hào)
對(duì)象生命周期和GC的關(guān)系。控制臺(tái)
我們已經(jīng)知道了,堆區(qū)的新生區(qū)分成了三個(gè)部分:伊甸園區(qū)、幸存者0區(qū)、幸存者1區(qū)。
其中0區(qū)也叫from,1區(qū)也叫to區(qū)。但是這個(gè)from和to是固定不變的嗎?NO,NO,NO不是的。當(dāng)新生區(qū)執(zhí)行一次GC(YGC)后,from和to區(qū)會(huì)進(jìn)行交換。交換后,也就是在GC之后,誰空誰是to區(qū)。所以,from區(qū)和to區(qū)的位置和名分不是一成不變的。會(huì)發(fā)生變化的。
Java堆從GC的角度可以分為:新生區(qū)和老年代。這個(gè)是從物理分的。
新生代和老年代,占用堆區(qū)的比例是:1比2
在新生代中的伊甸園區(qū)和幸存者0區(qū)、幸存者1區(qū)的占比是:8比1比1
從邏輯來分的話,又有永久代(元空間)。如下圖:
新生區(qū)GC (MinorGC) 的過程:復(fù)制->清空->互換
1:復(fù)制
eden、Survivor From區(qū) 復(fù)制到Survivor To區(qū),年齡+1
首先,當(dāng)Eden區(qū)滿的時(shí)候會(huì)觸發(fā)第一次GC,把還存活的對(duì)象拷貝到survivorFrom區(qū),當(dāng)Eden區(qū)再次觸發(fā)GC的時(shí)候,會(huì)掃描Eden區(qū)和From區(qū)域,對(duì)這兩個(gè)區(qū)域進(jìn)行垃圾回收,經(jīng)過這次垃圾回收后還存活的對(duì)象,則直接復(fù)制到To區(qū)(如果有對(duì)象的年齡已經(jīng)達(dá)到了去往老年代的標(biāo)準(zhǔn),則這些達(dá)到標(biāo)準(zhǔn)的對(duì)象將會(huì)被復(fù)制到老年代區(qū)),同時(shí)把這些對(duì)象的年齡+1
2:清空
清空Eden、survivorFrom區(qū)
然后,清空Eden和SuriviorFrom中的對(duì)象,也即是復(fù)制之后有交換。誰空誰做to區(qū)。
3:SurvivorTo和SurvivorFrom互換
最后,Survivor To和Survivor From互換,原來Survivor To成為下一次GC的Survivor From區(qū),部分對(duì)象會(huì)在From和To區(qū)中復(fù)制來復(fù)制去的,如此交換15次(由JVM參賽MaxTenuringThreshold決定的,這個(gè)參賽默認(rèn)值就是15),最終如果還是存活的對(duì)象,就把這些存活的對(duì)象存入到老年代區(qū)域。
這個(gè)過程可以有個(gè)生活中的case.士兵到將軍的過程。士兵上戰(zhàn)場(chǎng),幸存下來,成班長,下次戰(zhàn)爭來臨的時(shí)候,班長帶著新的士兵繼續(xù)沖殺,幸存下來,班長升級(jí)成排長,以此類推。經(jīng)歷大大小小戰(zhàn)役十五次之后,升級(jí)成了將軍,進(jìn)入到年老代。
Java7的永久代:
JVM內(nèi)存管理的模型圖如下:
Why?
真相:經(jīng)過研究,不同對(duì)象的生命周期是不同的(廢話嘛,不同對(duì)象,操作鏈路長短不一樣,當(dāng)然生命周期不一樣了),98%的對(duì)象是臨時(shí)對(duì)象(臨時(shí)對(duì)象,就是用完就被回收了)。
實(shí)際而言,方法區(qū)(Method Area)和堆區(qū)一樣,是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲(chǔ)虛擬機(jī)加載的:類信息+普通常量+靜態(tài)常量+編譯器編譯后的代碼等等。雖然JVM規(guī)范將方法區(qū)描述為堆的一個(gè)邏輯部分,但是它卻還有一個(gè)別名:N0n-Heap(非堆),目的就是要和堆區(qū)分開的(這句話怎么理解?我們從小教育都知道,臺(tái)灣是中國的一部分,但是臺(tái)灣還有個(gè)別名:中華臺(tái)北。其目的就是臺(tái)灣想在國際上和中國區(qū)分開而已)。
對(duì)于HotSpot虛擬機(jī),很多開發(fā)者習(xí)慣將方法區(qū)稱之為”永久代(Parmanent Gen)”,但嚴(yán)格本質(zhì)上說兩者不同。或者說使用永久代來實(shí)現(xiàn)方法區(qū)而已,永久代是方法區(qū)(相當(dāng)于是一個(gè)接口Interface)的一個(gè)實(shí)現(xiàn)。JDK1.7的版本中,已經(jīng)將原本存放永久代的字符串常量池移走了。
三者之間在堆內(nèi)存中的關(guān)系,我們?cè)趤砜匆槐椋缦聢D:
永久代:java7之前
永久存儲(chǔ)區(qū)是一個(gè)常駐內(nèi)存區(qū)域,用于存放JDK自身所攜帶的Class,Interface的元數(shù)據(jù),也就是說它存儲(chǔ)的是運(yùn)行環(huán)境必須的類信息,被裝載進(jìn)此區(qū)域的數(shù)據(jù)是不會(huì)被垃圾回收器回收掉的,關(guān)閉JVM才會(huì)釋放此區(qū)域所占用的內(nèi)存。
至此,我們已經(jīng)把JVM堆區(qū)講完了。那么接下來凱哥(凱哥Java:kaigejava)將接著講解JVM調(diào)優(yōu)命令了。歡迎大家一起繼續(xù)學(xué)習(xí)。
JVM Java
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。