前言
作為一名java工程師,無論如何都得對JVM有一定的了解,如果在互聯網公司,尤其像BATM這樣的大廠,如果想在技術上有一定的造詣那么對JVM就得有非常深入的了解,但作為一名普通的java工程師個人覺得最起碼需要知道JVM記憶體結構(運行時資料區)由哪些模塊組成,以及每個模塊的作用,這里筆者是這樣記得:三黃兩綠,即五個模塊,“黃”表示是執行緒私有的,只有自己能看的見,“綠”表示是大家都能用的,共享的,配合下圖以及這四個字,JVM的記憶體結構就算掌握了,
結構
其中黃色區域,即執行緒私有的三個模塊分別為:虛擬機堆疊,本地方法堆疊,程式計算數器,
綠色區域,即所謂的執行緒共享模塊:方法區和堆,

功能
這里對五個模塊作簡要介紹,后續博客會針對每個模塊作詳細介紹,
堆
jvm 中 堆占用的記憶體最大,它的作用就是用于存放物件,幾乎所有的物件都分配中堆中,jvm中涉及到垃圾回收也主要作用于堆,因此也經常稱作GC堆(Garbage Collected Heap),特性:執行緒共享,空間不足時會拋OutOfMemoryError例外
方法區
與堆一樣,它的作用是用于加載類資訊、常量、靜態變數以及即時編譯器編譯后的代碼等資訊,部分垃圾回收作業也會在方法區進行,但是效果不是那么太明顯,特性:執行緒共享,無法擴展時同樣會拋OutOfMemoryError例外
程式計數器
從硬體的角度來說,它是一個暫存器,當然在jvm中它是被虛擬化出來的一個暫存器,它的寄存功能是用來寄存當前執行緒所執行的位元組碼的下一步(分支、回圈、跳轉、例外處理、執行緒恢復)行號,特性:占用記憶體較小,執行緒私有,不會拋OutOfMemoryError例外,可以理解成只需要暫存一個整數,
虛擬機堆疊
說到堆疊顧名思義就是一種資料結構,先進后出,用于存盤方法呼叫和方法執行的資訊,例如區域變數表、運算元堆疊、動態連接和方法回傳地址等資訊,每一個方法從呼叫至執行完成的程序,都對應著一個堆疊在虛擬機堆疊里從入堆疊到出堆疊的程序,特性:執行緒私有,如果執行緒請求的堆疊深度大于虛擬機所允許的深度,將拋出StackOverFlowError例外,如果無法擴展時會拋OutOfMemoryError例外,
本地方法堆疊
同樣是一種堆疊,但此堆疊不是用來處理java的方法呼叫等行為,而是用于處理本地的方法,例如在java中呼叫了其他的語言的方法,這些方法的呼叫就會交給本地方法堆疊來處理,特性與虛擬機堆疊類似:執行緒私有,也會拋出StackOverFlowError和OutOfMemoryError例外,
至此,jvm的記憶體結構介紹完了,至于每個模塊的作業原理請參考如下博文(持續更新中):
由淺入深了解JVM-堆
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260422.html
標籤:其他
上一篇:簡明圖解馮·諾依曼計算機體系
