摘要:此內(nèi)存區(qū)域是唯一一個(gè)在虛擬機(jī)規(guī)范中沒(méi)有規(guī)定任何情況的區(qū)域。其中位長(zhǎng)度的和類型的數(shù)據(jù)會(huì)占用個(gè)局部變量空間,其余數(shù)據(jù)類型只占用個(gè)。內(nèi)存區(qū)域異常線程請(qǐng)求棧深度大于虛擬機(jī)允許的深度,將拋出。上限控制異常直接內(nèi)存
運(yùn)行時(shí)數(shù)據(jù)區(qū)域
程序計(jì)數(shù)器
線程正在執(zhí)行時(shí),如果執(zhí)行的是一個(gè)Java方法,則這個(gè)計(jì)數(shù)器記錄的是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址。
如果執(zhí)行的是Native方法,則這個(gè)計(jì)數(shù)器值為空(Undefined)。此內(nèi)存區(qū)域是唯一一個(gè)在Java虛擬機(jī)規(guī)范中沒(méi)有規(guī)定任何OutOfMemoryError情況的區(qū)域。
Java虛擬機(jī)棧
每個(gè)方法在執(zhí)行時(shí),都會(huì)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口等信息。
局部變量表存放了編譯期克制的各種基本數(shù)據(jù)類型(boolean、byte、char、short、int、float、long、double)、對(duì)象引用和returnAddress類型。
其中64位長(zhǎng)度的long和double類型的數(shù)據(jù)會(huì)占用2個(gè)局部變量空間(Slot),其余數(shù)據(jù)類型只占用1個(gè)。
局部變量表所需的內(nèi)存空間在在編譯期間完成分配,當(dāng)進(jìn)入一個(gè)方法時(shí),這個(gè)方法需要的在幀中分配多大的局部變量空間是完全確定的,在運(yùn)行期間不會(huì)改變局部變量表的大小。
內(nèi)存區(qū)域異常:
StackOverflowError:線程請(qǐng)求棧深度大于虛擬機(jī)允許的深度,將拋出。
OutOfMemoryError:虛擬機(jī)棧動(dòng)態(tài)擴(kuò)展時(shí),如果無(wú)法申請(qǐng)到足夠的內(nèi)存,將拋出。
本地方法棧
本地方法棧與虛擬機(jī)棧作用類似,只不過(guò)虛擬機(jī)棧是為Java方法(也就是字節(jié)碼)服務(wù),而本地方法棧是為了Native服務(wù)。
本地方法棧區(qū)域也會(huì)拋出StackOverflowError、OutOfMemoryError異常。
Java堆
Java堆是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊,是被線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。此內(nèi)存區(qū)域唯一目的就是存放對(duì)象實(shí)例,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存。
Java堆是垃圾收集器管理的主要區(qū)域,也稱Gc堆,Java堆可以處于物理上不連續(xù)的內(nèi)存空間中,只要邏輯上是連續(xù)的即可。
可通過(guò)-Xmx 和 -Xms 控制
異常:OutOfMemoryError:堆內(nèi)存無(wú)法滿足實(shí)例分配,并且無(wú)法擴(kuò)展時(shí),將會(huì)拋出。
方法區(qū)
方法區(qū)和Java堆一樣,是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。
運(yùn)行時(shí)常量池是方法區(qū)的一部分。
Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項(xiàng)信息是常量池,用于存放編譯期生成的各種字面量和符號(hào)引用,這部分內(nèi)容將在類加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池中存放。
-XX:MaxPermSize 上限控制
異常:OutOfMemoryError
直接內(nèi)存
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75032.html
摘要:內(nèi)存模型首先介紹下程序具體執(zhí)行的過(guò)程源代碼文件后綴會(huì)被編譯器編譯為字節(jié)碼文件后綴由中的類加載器加載各個(gè)類的字節(jié)碼文件,加載完畢之后,交由執(zhí)行引擎執(zhí)行在整個(gè)程序執(zhí)行過(guò)程中,會(huì)用一段空間來(lái)存儲(chǔ)程序執(zhí)行期間需要用到的數(shù)據(jù)和相關(guān)信息,這段空間一般被 [TOC] JVM內(nèi)存模型 首先介紹下Java程序具體執(zhí)行的過(guò)程: Java源代碼文件(.java后綴)會(huì)被Java編譯器編譯為字節(jié)碼文件(....
摘要:同時(shí)也會(huì)關(guān)注市場(chǎng)上同崗位薪資,以便對(duì)企業(yè)內(nèi)部薪資結(jié)構(gòu)做出相應(yīng)調(diào)整。一般來(lái)說(shuō),相同崗位和職責(zé)的員工,薪資低于市場(chǎng)不超過(guò),都屬于合理范疇,因?yàn)橐粋€(gè)員工不會(huì)為了的薪酬而跳槽。同時(shí),還能激勵(lì)員工自我提升,以獲得相應(yīng)技能市場(chǎng)所給予的報(bào)酬。 各位職場(chǎng)人都聽(tīng)說(shuō)過(guò)薪資倒掛這詞兒吧,這個(gè)情況在行業(yè)內(nèi)早就不是什...
摘要:運(yùn)行時(shí)數(shù)據(jù)區(qū)域的學(xué)習(xí),是學(xué)習(xí)以及機(jī)制的基礎(chǔ),也是深入理解對(duì)象創(chuàng)建及運(yùn)行過(guò)程的前提。了解內(nèi)存區(qū)域劃分,是學(xué)習(xí)概念的前提。 Java 運(yùn)行時(shí)數(shù)據(jù)區(qū)域的學(xué)習(xí),是學(xué)習(xí) jvm 以及 GC 機(jī)制的基礎(chǔ),也是深入理解 java 對(duì)象創(chuàng)建及運(yùn)行過(guò)程的前提。廢話不多說(shuō),直接進(jìn)入正題: 一張圖總結(jié) showImg(https://segmentfault.com/img/bVOMAn?w=685&h=5...
摘要:作為一個(gè)程序員,不了解內(nèi)存模型就不能寫(xiě)出能夠充分利用內(nèi)存的代碼。程序計(jì)數(shù)器是在電腦處理器中的一個(gè)寄存器,用來(lái)指示電腦下一步要運(yùn)行的指令序列。在虛擬機(jī)中,本地方法棧和虛擬機(jī)棧是共用同一塊內(nèi)存的,不做具體區(qū)分。 作為一個(gè) Java 程序員,不了解 Java 內(nèi)存模型就不能寫(xiě)出能夠充分利用內(nèi)存的代碼。本文通過(guò)對(duì) Java 內(nèi)存模型的介紹,讓讀者能夠了解 Java 的內(nèi)存的分配情況,適合 Ja...
摘要:堆區(qū)堆是虛擬機(jī)所管理的內(nèi)存中最大的一塊,它是被所有線程共享的一塊內(nèi)存區(qū)域,該區(qū)域在虛擬機(jī)啟動(dòng)的時(shí)候創(chuàng)建。 運(yùn)行時(shí)數(shù)據(jù)區(qū)域 ? ?想要了解jvm,那對(duì)其內(nèi)存分配管理的學(xué)習(xí)是必不可少的;java虛擬機(jī)在執(zhí)行java程序的時(shí)候會(huì)把它所管理的內(nèi)存劃分成若干數(shù)據(jù)區(qū)域。這些區(qū)域有著不同的功能、用途、創(chuàng)建/銷毀時(shí)間。java虛擬機(jī)所分配管理的內(nèi)存區(qū)域如圖1所示 程序計(jì)數(shù)器 ? ?程序計(jì)數(shù)器是一塊比較...
閱讀 746·2023-04-26 01:30
閱讀 3301·2021-11-24 10:32
閱讀 2179·2021-11-22 14:56
閱讀 1979·2021-11-18 10:07
閱讀 553·2019-08-29 17:14
閱讀 624·2019-08-26 12:21
閱讀 3103·2019-08-26 10:55
閱讀 2940·2019-08-23 18:09