JVM進(jìn)階(十三)——階段回顧
#JVM進(jìn)階(十三)——階段回顧

各位小伙伴,到上一篇博文為止,我們的內(nèi)存模型相關(guān)知識(shí)就已經(jīng)講完了!講!完!了!不知道大家吸收了多少,這里我們簡(jiǎn)單的來回顧一下吧!
內(nèi)存基本分為JAVA棧、本地方法棧、堆和方法區(qū)。
首先棧存放的是基本類型變量,局部變量,和對(duì)象的引用,他在內(nèi)存中是一塊連續(xù)的區(qū)域,有大小限制,是由系統(tǒng)自動(dòng)分配的,因此它的讀寫速度比較快,而且會(huì)自動(dòng)釋放掉為該變量所分配的內(nèi)存空間;還有一點(diǎn)就是他還存放線程調(diào)用方法時(shí)存儲(chǔ)局部變量表,操作,方法出口等與方法執(zhí)行相關(guān)的信息。
堆的話是存放對(duì)象和數(shù)組;在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存(比如 new()),較慢,但靈活;是不連續(xù)的內(nèi)存區(qū)域,在發(fā)出申請(qǐng)的時(shí)候,系統(tǒng)首先會(huì)遍歷一個(gè)存有空閑地址節(jié)點(diǎn)的鏈表,找到第一個(gè)滿足申請(qǐng)大小的節(jié)點(diǎn),將他從鏈表刪除,并分配給申請(qǐng)者,如果空間剩余,則將多出來的加入鏈表;由Java虛擬機(jī)的自動(dòng)垃圾回收器來管理。分為一個(gè)Eden區(qū)和兩個(gè)Survivor區(qū)。
方法區(qū)主要存放靜態(tài)變量,常量,全局變量。他的大小不必是固定的,jvm可以根據(jù)應(yīng)用的需要?jiǎng)討B(tài)調(diào)整,同樣方法區(qū)也不必是連續(xù)的。方法區(qū)可以在堆(甚至是虛擬機(jī)自己的堆)中分配。jvm可以允許用戶和程序指定方法區(qū)的初始大小,最小和最大尺寸。因?yàn)榉椒▍^(qū)是被所有線程共享的,所以必須考慮數(shù)據(jù)的線程安全。假如兩個(gè)線程都在試圖找一個(gè)類,在該類還沒有被加載的情況下,只應(yīng)該有一個(gè)線程去加載,而另一個(gè)線程需要等待。
本地方法棧則是為執(zhí)行Native方法服務(wù),但這個(gè)在不同JVM內(nèi)有不同的內(nèi)部實(shí)現(xiàn),比如在HotSpot JVM中Java虛擬機(jī)棧和本地方法棧被實(shí)現(xiàn)為同一個(gè)棧區(qū)。
對(duì)于收集方法來說一般有兩種,“復(fù)制”和“標(biāo)記-清除-整理”。“復(fù)制”算法需要留有部分空間用于復(fù)制后的存儲(chǔ),適用于朝生夕死的對(duì)象;“標(biāo)記-清除-整理”適用于年老代,清除后形成邏輯上連續(xù)的區(qū)域,避免了內(nèi)存碎片。
對(duì)象被回收之前都要先被標(biāo)記為可回收的對(duì)象,一般有引用計(jì)數(shù)和可達(dá)性分析法。JAVA采用的則是可達(dá)性分析,從“GC Roots”開始組建一張張的關(guān)系網(wǎng),不在關(guān)系網(wǎng)上的就會(huì)被清除。標(biāo)記有兩次,因?yàn)楸粯?biāo)記后還可能會(huì)執(zhí)行finalize()方法。“GC Roots”被記錄在OopMap中,能夠讓虛擬機(jī)快速的得到他們,不用遍歷整個(gè)堆來尋找“GC Roots”了。
回收的時(shí)候需要暫停程序的所有線程,這個(gè)過程叫做STW,我們的程序需要優(yōu)化的時(shí)候,縮短STW也是優(yōu)化的一部分。
各種收集器都為縮短STW的時(shí)間提供了不同的策略,并行的、串行的,作用于年輕代的,作用于年老代的,還有作用于整個(gè)堆的。各有各的優(yōu)劣勢(shì),需要搭配使用,不能隨意組合。
好啦,這一整塊我們算是大概回憶完啦,在后面的博文中我們就要開始講虛擬機(jī)中的類加載機(jī)制了!
 
Java JVM
版權(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)容。