Java記憶體區域劃分
執行時資料區域:Jvm在執行javademo時將它管理的記憶體劃分為不同的區域。
一、執行資料區域。
1.程式計數器。
較小的記憶體空間。執行緒私有的。當前位元組碼所執行位元組碼的行號指示器。通過這個值,來選取下一條要執行的位元組碼。在多執行緒中,每一個執行緒都有一個計數器,這樣才能胡不影響。
2.Java虛擬機器棧。
執行緒私有。生命週期同線程。為jvm執行java方法。它是java方法的記憶體模型。棧幀來存放方法的區域性變數,運算元棧,返回地址等,當方法執行完成的時候就釋放該棧幀。常說的棧記憶體,就是指虛擬機器棧。
兩種異常:①StackOverflowError 執行緒請求的棧深度>jvm允許。
②OutOfMemoryError 記憶體動態擴充套件,無法申請到足夠的記憶體。
3.本地方法棧
執行緒私有。針對的Native方法,即本地方法。其他的和Java虛擬機器棧完全相同。有的虛擬機器,就不區分這倆部分。hotStop就是。
4.java堆
執行緒共享。最大的區域。不需要連續記憶體。可擴充套件。
存放所有的物件例項和陣列。 java堆的物件是垃圾回收器主要管理區域,故稱GC堆。從回收角度看分 :新生代;老生代。更細分為:Eden空間,from Survivor空間,to Surviror空間。
Eden區的物件都是朝生夕死,發生minor gc的時候會清除eden區和survival區的,把存活的物件移到另一個Survival區,該survial區由老年代保證。當在年輕代中物件經過多次minor gc以後還存活,達到老年代的年紀,就會移動到老年代,還有就是大物件在年輕代無法儲存,直接轉到老年代,還有可能因為擔保而進入老年代的
java堆也可以分配出多個執行緒私有的緩衝區,方便管理物件。
OutOfmMemoryError:堆無法進行擴充套件。
5.方法區
執行緒共享。存放被jvm載入的類資訊,常量,靜態變數。
OutofMemeortyError:無法滿足記憶體要求。
6.執行時常量池
他是方法區的一部分,但是和方法區的常量池有區別,他存放的常量是在執行時產生的,而不是編譯時產生的。注意與普通方法區的區別。jvm沒有對這塊區域的格式進行要求,這是唯一的沒要求的區域。
異常同上。
二、直接記憶體。
不屬於jvm不受jvm的管理,而是直接受 使用者機子 的管理。也有可能出現OUtofMemoryError異常。
三、異常。
OutOfMemoryError:除了程式計數器不會之外,其他的記憶體空間都可能出現。
比如:java堆:物件的數量太多、堆空間被設定的太小。
棧空間:申請的棧深度大於允許的深度、棧空間在擴充套件是無法申請到空間
方法區:
相關推薦
Java虛擬機器札記-Java記憶體區域劃分
眾所周知,Java程式設計師不需要為物件手動分配和釋放記憶體。這要歸功於虛擬機器。但凡事有利就有弊,一旦出現記憶體溢位或洩露方面的問題,程式設計師如果不瞭解虛擬機器是如何管理記憶體的,排查問題不是件容易的事情。本文將介紹Java虛擬機器管理的各個記憶體區域,為以
java 記憶體區域劃分
執行緒共享的:堆記憶體,方法區(非堆) 執行緒私有的:程式計數器,Java虛擬機器棧,本地方法棧, 1 程式計數器單屬於某個執行緒,生命週期和執行緒相同,記錄了執行緒程式指令的執行位置,當因為cpu切換,執行緒恢復執行,方法跳轉等,通過通過程式計數器來獲取下一條準
Java記憶體區域劃分
執行時資料區域:Jvm在執行javademo時將它管理的記憶體劃分為不同的區域。 一、執行資料區域。 1.程式計數器。 較小的記憶體空間。執行緒私有的。當前位元組碼所執行位元組碼的行號指示器。通過這個值,來選取下一條要執行的位元組碼。在多執行緒中,每一個
Java記憶體區域劃分及物件的訪問方式
JVM 記憶體區域劃分 JVM 記憶體區域劃分如圖: 下面對以上劃分具體講解: 程式計數器 程式計數器用來指示當前位元組碼執行到第幾行。每個計數器只能記錄一個執行緒的行號,所以他是執行緒私有的。 當程式執行Java方法時,其記錄當前執行
Java虛擬機器(一)——Java記憶體區域劃分
介紹 Java虛擬機器在執行Java程式的過程中會把他所管理的記憶體劃分為若干個不同的資料區域。這些區域都有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。 執行時資料區域
Java記憶體區域劃分、記憶體分配原理(基於jdk1.7 源自 《深入理解java虛擬機器》)
執行時資料區域 Java虛擬機器在執行Java的過程中會把管理的記憶體劃分為若干個不同的資料區域。這些區域有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,而有的區域則依賴執行緒的啟動和結束而建立和銷燬。 Java虛擬機
Java的記憶體管理機制之記憶體區域劃分
各位,好久不見。先做個預告,由於最近主要在做Java服務端開發,最近一段時間會更新Java服務端開發相關的一些知識,包括但不限於一些讀書筆記、框架的學習筆記、和最近一段時間的思考和沉澱。先從Java虛擬機器的記憶體開始吧。 Java虛擬機器在執行Java
JVM的記憶體區域劃分(面試問題:你瞭解java記憶體模型麼)
JVM的記憶體區域劃分 學過C語言的朋友都知道C編譯器在劃分記憶體區域的時候經常將管理的區域劃分為資料段和程式碼段,資料段包括堆、棧以及靜態資料區。那麼在Java語言當中,記憶體又是如何劃分的呢? 由於Java程式是交由JVM執行的,所以我們在談Java記憶
深入JVM(Java虛擬機器)(一)Java虛擬機器記憶體區域劃分
本文為博主參閱自《深入理解Java虛擬機器:JVM高階特性與最佳實踐(第2版)》,書中的全部講解均以《Java虛擬機器規範(Java SE 7)》為依據 圖一中為JVM規範中對java虛擬機器記憶體區域的劃分及定義,為單執行緒時的粗略劃分 圖二,中所繪為JVM
深入理解java虛擬機器(一):java記憶體區域(記憶體結構劃分)
圖一:java記憶體結構劃分 由上圖可知,java記憶體主要分為6部分,分別是程式計數器,虛擬機器棧,本地方法棧,堆,方法區和直接記憶體,下面將逐一詳細描述。 1、程式計數器 執行緒私有,即每個執行緒都會有一個,執行緒之間互不影響,獨立儲存。 代表著當前執行緒所執行
Java虛擬機器記憶體區域劃分-----內容為自己記憶所用
首先是通過網上圖片自己所畫的java虛擬機器記憶體圖 1.程式計數器 程式計數器與執行緒的相關的 當一個執行緒停止工作後,在次啟動該執行緒,執行緒是如何回到上一次停止工作的地方,此時便應用到了程式計數器 2.本地方法棧 它就是與外界一些關聯,比如作業系統之類
Java虛擬機器(JVM)執行時記憶體區域劃分詳解
Java虛擬機器(JVM)記憶體區域劃分詳解 最近一直沒有怎麼更新自己的部落格,主要是由於老哥公司最近的一個招標專案忙得焦頭爛額,心力憔悴(ಥ_ಥ),趁著專案的空檔期來重構一下以前的一篇關於jvm記憶體區域劃分的部落格,仔細閱讀了一下之前的部落格,大量的文字敘
【Java虛擬機器】記憶體區域劃分
Java虛擬機器在執行Java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。這些區域都有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。它包括以下幾個執行時資料區域: 程式計數器
Java虛擬機器記憶體區域劃分
Java程式執行時的資料區域 Java虛擬機器在執行Java程式的過程中,會把它所管理的記憶體劃分為若干個不同的資料區域,這些區域都有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。J
java執行時記憶體區域劃分(1)
劇情預告 Java虛擬機器在執行Java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。 列舉一下: 1.方法區 2.虛擬機器棧 3.本地方法棧 4.堆 5.程式計數器
Java虛擬機器--記憶體區域劃分
執行時資料區域 在執行時資料區內,白色部分的是執行緒私有的:虛擬機器棧、本地方法棧、程式計數器 程式計數器:執行緒私有,可以看做當前執行緒所執行的位元組碼的行號指示器。若執行緒正在執行
Java的記憶體區域劃分
## 記憶體分割槽簡介 老生常談的問題了,雖然網上一搜一大把,也很詳細,但是我還是想寫一寫,通過自己的總結整理,加深一下印象。 我不知道學習Java記憶體分割槽有什麼實際作用,但它就是像常識一樣,一個使用Java語言的人不知道記憶體分割槽總感覺差點意思。 Java程式是執行在JVM虛擬機器上的。Java
Java記憶體區域初識
一、執行時資料區 Java虛擬機器在執行Java程式的過程中會把它管理的記憶體劃分為幾個不同的資料區域。這些區域都有各自的用途,以及建立和銷燬的時間,有的區域隨著虛擬機器程序的啟動而存在,有些區域則依賴使用者執行緒的啟動和結束而建立和銷燬。 圖1 Java虛擬機器執行時資料區
JVM的記憶體區域劃分 -- 學習
詳細檢視(轉自):https://www.cnblogs.com/dolphin0520/p/3613043.html 1.java程式具體執行過程 原始檔(.java)[-------java編譯器(java compiler)]>>>>位元組碼檔案(
讀薄《深入理解 JAVA 虛擬機器》Java記憶體區域
很早之前看了《深入理解 JAVA 虛擬機器》並寫下了讀書筆記。最近在結合一些其他資料整理部落格。希望能幫助到其他人抓住書的重點。 Java執行時資料區域 Java執行時資料區域 白色為執行緒獨佔的,灰色為執行緒共享的。 Java在執行的時候會把他所管理的記憶體劃分為若干區域,經常有人把記憶體區域分為