Java 内存分配
JVM內(nèi)存區(qū)域模型:
?
線程私有的
程序計(jì)數(shù)器:程序計(jì)數(shù)器是一塊較小的區(qū)域,可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,是Java虛擬機(jī)中唯一沒有定義OutOfMemory異常的區(qū)域。
虛擬機(jī)棧:虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法被執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量表,操作棧,動(dòng)態(tài)鏈接,方法出口等信息。每一個(gè)方法被調(diào)用的過程就對(duì)應(yīng)一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過程。
? ? ? ? ? ? ? Java虛擬機(jī)棧可能出現(xiàn)兩種類型的異常:
? ? ? ? ? ? ? 1. 線程請(qǐng)求的棧深度大于虛擬機(jī)允許的棧深度,將拋出StackOverflowError。
? ? ? ? ? ? ? 2.虛擬機(jī)棧空間可以動(dòng)態(tài)擴(kuò)展,當(dāng)動(dòng)態(tài)擴(kuò)展是無(wú)法申請(qǐng)到足夠的空間時(shí),拋出OutOfMemory異常。
本地方法棧:本地方法棧和虛擬機(jī)棧基本類似,只不過Java虛擬機(jī)棧執(zhí)行的是Java代碼(字節(jié)碼),本地方法棧中執(zhí)行的是本地方法的服務(wù)。本地方法棧中也會(huì)拋出StackOverflowError和OutOfMemory異常。
線程共享部分:
堆:堆是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊。堆是所有線程共享的一塊區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。堆的唯一目的是存放對(duì)象實(shí)例。
? ? ? Java堆可以是物理上不連續(xù)的空間,只要邏輯上連續(xù)即可,主流的虛擬機(jī)都是按照可擴(kuò)展的方式來(lái)實(shí)現(xiàn)的。如果當(dāng)前對(duì)中沒有內(nèi)存完成對(duì)象實(shí)例的創(chuàng)建,并且不能在進(jìn)行內(nèi)存擴(kuò)展,則會(huì)拋出OutOfMemory異常。
方法區(qū):方法區(qū)也是線程共享的區(qū)域,用于存儲(chǔ)已經(jīng)被虛擬機(jī)加載的類信息,常量,靜態(tài)變量和即時(shí)編譯器(JIT)編譯后的代碼等數(shù)據(jù)。
?
?對(duì)象訪問
? ? ? ?對(duì)象訪問在Java語(yǔ)言中無(wú)處不在,即使是最簡(jiǎn)單的訪問,也會(huì)涉及到Java棧,java堆,方法區(qū)這三個(gè)最重要的內(nèi)存區(qū)域之間的關(guān)聯(lián)關(guān)系。
? ? ? 主流的訪問方式有兩種:句柄訪問方式和直接指針。
? ? ?1. 如果使用句柄訪問方式,Java堆中將會(huì)劃分出一塊內(nèi)存來(lái)作為句柄池,reference中存儲(chǔ)的就是對(duì)象的地址,而句柄中包含了對(duì)象實(shí)例數(shù)據(jù)和類型數(shù)據(jù)各自的具體地址信息。
? ? ?
? ?2. 如果通過直接指針方式訪問,Java堆對(duì)象的布局中就必須考慮如何放置訪問類型數(shù)據(jù)的相關(guān)信息,reference中直接存儲(chǔ)的就是對(duì)象的地址。
? ?
兩種方式各有優(yōu)勢(shì),句柄訪問方式最大的好處是reference中存放的是穩(wěn)定的句柄地址,在對(duì)象被移動(dòng)時(shí),只會(huì)改變句柄中的實(shí)例數(shù)據(jù)指針,而reference本身不需要被修改。
而指針訪問的最大優(yōu)勢(shì)是速度快,它節(jié)省了一次指針定位的開銷,由于對(duì)象訪問在Java中非常頻繁,一次這類開銷積少成多后也是一項(xiàng)非常可觀的成本。
?
http://blog.csdn.net/OyangYujun/article/details/41173747
http://blog.csdn.net/yangyuankp/article/details/7651251
http://www.cnblogs.com/paddix/p/5309550.html
轉(zhuǎn)載于:https://www.cnblogs.com/hongdada/p/6928556.html
總結(jié)
- 上一篇: E-UTRA channel bandw
- 下一篇: JS中Node节点总结