? ? ? Java虛擬機(jī)內(nèi)存分為五個(gè)區(qū)域: 辦法區(qū),堆, 虛擬機(jī)棧,本地辦法棧,程序計(jì)數(shù)器。
其間辦法區(qū)和堆是java虛擬機(jī)同享的內(nèi)存區(qū)域,虛擬機(jī)棧,本地辦法棧,程序計(jì)數(shù)器是線程私有的。
1.程序計(jì)數(shù)器: ? ?? ? ?當(dāng)時(shí)線程履行字節(jié)碼的行號指示器。
經(jīng)過改變這個(gè)指示器的值來選擇下一條需求履行的字節(jié)碼指令。
這個(gè)內(nèi)存區(qū)域是Java虛擬機(jī)*一個(gè)沒有定義OutOfMemeryError狀況的區(qū)域。
2. Java虛擬機(jī)棧: ? ? ? ???虛擬機(jī)棧描繪的是Java辦法履行的內(nèi)存模型:每個(gè)辦法履行是都會創(chuàng)立棧幀(Stack Frame)用于存儲局部變量,操作棧,辦法信息,動(dòng)態(tài)連接,辦法出口等信息。
? ? ? ? 在java虛擬機(jī)標(biāo)準(zhǔn)中,關(guān)于這兩個(gè)區(qū)域規(guī)定了兩種狀況的反常: 1)假如線程懇求的棧深度大于虛擬機(jī)所答應(yīng)的深度將會拋出StackOverFlowError反常,? 2)Java虛擬機(jī)能夠動(dòng)態(tài)擴(kuò)展,當(dāng)無法申請到滿意的內(nèi)存時(shí)會拋出OutOfMemeryError 3.本地辦法棧 ? ?? ? 本地辦法棧與Java虛擬機(jī)棧十分類似,其區(qū)別是Java虛擬機(jī)棧為虛擬機(jī)履行Java辦法服務(wù),而本地辦法棧是虛擬機(jī)使用到的Native辦法服務(wù)。
所以本地辦法棧也也許呈現(xiàn)兩種與Java虛擬機(jī)棧相同的反常。
4. Java堆 ? ? ? ? Java堆是Java虛擬機(jī)辦理的*的一塊內(nèi)存區(qū)域,java堆是被一切Java線程同享的,在Java虛擬機(jī)啟動(dòng)時(shí)創(chuàng)立,此內(nèi)存的*意圖即是寄存目標(biāo)實(shí)例。
簡直一切的目標(biāo)實(shí)例都要分配在堆中。
(跟著JIT編譯器的發(fā)展,*剖析技能的逐漸老練,棧上分配,標(biāo)量替換等優(yōu)化技能,使得部分目標(biāo)不再分配在堆上。
) Java堆的巨細(xì)經(jīng)過 -Xmx和-Xms兩個(gè)參數(shù)控制。
但是當(dāng)堆的內(nèi)存再無法擴(kuò)展時(shí),就會呈現(xiàn)OutOfMemeryError. 5.辦法區(qū) ? ? ? ? 辦法區(qū)與Java堆相同,是各個(gè)線程同享的內(nèi)存區(qū)域,他用于存儲類信息,常量,靜態(tài)變量以及及時(shí)編譯后的代碼等數(shù)據(jù)。
當(dāng)辦法區(qū)無法滿意內(nèi)存分配需求時(shí),將拋出OutOfMemeryError. 標(biāo)簽: ? ? 上海市虛擬機(jī) ? 上海市虛擬機(jī)廠家

上海市 上海市上海市虛擬機(jī)廠家
供應(yīng)虛擬機(jī)Java 虛擬機(jī)的內(nèi)存怎樣分配