摘要:局部變量表所需內(nèi)存空間在編譯期確定,方法運(yùn)行期間,不改變局部變量表大小。位和占用兩個(gè)局部變量空間,其余類(lèi)型占用一個(gè)空間。直接內(nèi)存不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的邏輯組成部分,中對(duì)象,作為直接內(nèi)存的引用進(jìn)行操作,減少和堆上來(lái)回復(fù)制數(shù)據(jù)。
虛擬機(jī)棧 JVM stack
線程私有
Java方法執(zhí)行的內(nèi)存模型,每個(gè)方法對(duì)應(yīng)棧幀stack frame,方法調(diào)用過(guò)程,對(duì)應(yīng)著入棧與出棧;
棧幀存儲(chǔ),局部變量表,操作數(shù)棧,動(dòng)態(tài)鏈接,方法出口等。
局部變量表: Java 8種基本類(lèi)型,reference類(lèi)型,returnAddress類(lèi)型。
局部變量表所需內(nèi)存空間在編譯期確定,方法運(yùn)行期間,不改變局部變量表大小。
64位 long和double 占用兩個(gè) 局部變量空間slot,其余類(lèi)型占用一個(gè)空間。
錯(cuò)誤:
stackoverflow error, 線程請(qǐng)求棧超過(guò)VM允許范圍。
OutOfMemoryError, 棧動(dòng)態(tài)擴(kuò)展失敗,無(wú)法申請(qǐng)到足夠內(nèi)存。
本地方法棧 NativeMethodStack為Native方法服務(wù)
可以多種語(yǔ)言實(shí)現(xiàn)
StackOverflowError 和 OutOfMemoryError
堆 HeapJVM 規(guī)范規(guī)定,Heap處于不連續(xù)的內(nèi)存空間中,只要邏輯上連續(xù)即可。
線程共享,JVM啟動(dòng)時(shí)創(chuàng)建,對(duì)象實(shí)例和數(shù)組都在堆上分配。
多個(gè)線程私有的Heap區(qū)域, Thread Local Allocation Buffer (TLAB)
TLAB在Eden區(qū),目的,減少線程共享。
分為年輕代 Young Generation 和 老年代 Old Generation,比例 1:2;
年輕代分為 :Eden區(qū) 和 兩個(gè)Survivor區(qū), 比例: 8:1:1;
年輕代GC采用復(fù)制算法
老年代GC采用 mark sweep 和 mark compact
控制參數(shù): -Xms -Xmx
拋出 OutOfMemory Error
方法區(qū) Method AreaJava 7 永久代 Permanent Generation;
JVM規(guī)范描述的Heap的一個(gè)邏輯部分;
線程共享;
存儲(chǔ)VM 加載的類(lèi)信息,常量,靜態(tài)變量。 即時(shí)編譯器編譯后的代碼等。
方法區(qū)主要回收 常量和無(wú)用的類(lèi)。
Java 8 元空間 Metaspace 。
運(yùn)行時(shí)常量池Java8 移到Heap中,
class 文件中 constant pool table;
存放 各種字面量和符號(hào)引用,具備動(dòng)態(tài)性,申請(qǐng)不到空間會(huì)拋出 OutOfMemoryError,
參數(shù): -XX:MaxPermSize
String.intern() 可以將新的String常量放入池中。
直接內(nèi)存 Direct Memory不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的邏輯組成部分,
NIO中 DirectByteBuffer對(duì)象, 作為直接內(nèi)存的引用進(jìn)行操作,減少Heap和Native堆上來(lái)回復(fù)制數(shù)據(jù)。
程序計(jì)數(shù)器 Program Counter Register線程私有,
當(dāng)前線程執(zhí)行的字節(jié)碼的行號(hào)指示器,
無(wú)OutOfMemoryError的區(qū)域。
參考資料:《深入理解Java虛擬機(jī)》
《Java性能權(quán)威指南》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76375.html
摘要:而字節(jié)碼運(yùn)行在之上,所以不用關(guān)心字節(jié)碼是在哪個(gè)操作系統(tǒng)編譯的,只要符合規(guī)范,那么,這個(gè)字節(jié)碼文件就是可運(yùn)行的。好處防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼安全性角度特別說(shuō)明類(lèi)加載器在成功加載某個(gè)類(lèi)之后,會(huì)把得到的類(lèi)的實(shí)例緩存起來(lái)。 前言 只有光頭才能變強(qiáng) JVM在準(zhǔn)備面試的時(shí)候就有看了,一直沒(méi)時(shí)間寫(xiě)筆記?,F(xiàn)在到了一家公司實(shí)習(xí),閑的時(shí)候就寫(xiě)寫(xiě),刷刷JVM博客,刷刷電子書(shū)。 學(xué)習(xí)JVM的目的也很簡(jiǎn)單...
摘要:然而偶爾的一次聚會(huì),你聽(tīng)說(shuō)和自己一起出道的同學(xué)早已經(jīng)年薪萬(wàn),而自己卻囊中羞澀。這個(gè)時(shí)候,你可能會(huì)懷疑自己的能力,也痛恨為什么當(dāng)初自己沒(méi)有好好復(fù)習(xí)。 作為一個(gè) Java 程序員,我們深知水平的深淺決定你的收入高低,月工資下到七八千,上到十幾萬(wàn)都是很正常的事情。許多人的現(xiàn)狀是平時(shí)總是陷在業(yè)務(wù)開(kāi)發(fā)...
摘要:可現(xiàn)在五年過(guò)去了,他想跳槽卻鮮有人問(wèn)津。最可氣的是比他晚一年畢業(yè)的學(xué)弟,勤勤懇懇在一家中型互聯(lián)網(wǎng)企業(yè)干了年,現(xiàn)在已經(jīng)跳槽到了阿里,月薪是我這個(gè)同學(xué)的倍。 我有個(gè)同學(xué)大學(xué)畢業(yè),因?yàn)閰s少工作經(jīng)驗(yàn),又不愿意去正經(jīng)的互聯(lián)網(wǎng)企業(yè)做實(shí)習(xí)生,他嫌工資太低,于是進(jìn)了家外包公司,那時(shí)候感覺(jué)待遇還可以??涩F(xiàn)在五...
摘要:接私活對(duì)程序員這個(gè)圈子來(lái)說(shuō)是一個(gè)既公開(kāi)又隱私的話題,不說(shuō)全部,應(yīng)該大多數(shù)程序員都有過(guò)想要接私活的想法,當(dāng)然,也有部分得道成仙的不主張接私活。 接私活 對(duì)程序員這個(gè)圈子來(lái)說(shuō)是一個(gè)既公開(kāi)又隱私的話題,不說(shuō)全部,應(yīng)該大多數(shù)程序員都有過(guò)想要接私活的想法,當(dāng)然,也有部分得道成仙的不主張接私活。但是很少...
閱讀 825·2021-10-13 09:39
閱讀 3703·2021-10-12 10:12
閱讀 1757·2021-08-13 15:07
閱讀 1015·2019-08-29 15:31
閱讀 2890·2019-08-26 13:25
閱讀 1783·2019-08-23 18:38
閱讀 1886·2019-08-23 18:25
閱讀 1862·2019-08-23 17:20