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