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