{%hackmd BJrTq20hE %} # JAVA JVM 記憶體結構 <summary>JVM的記憶體結構</summary>  ## **classloader 與 execution engine(<font color="#dd0000">紅框</font>)** > classloader為input端,負責將硬碟上的class檔讀進到Runtime data area;execution engine為output端,負責將運算指令交給作業系統,由作業系統調度硬體進行運算,最終再將結果回傳到Runtime data area。 ## **Stack Area 與 PC Registers(<font color="#dddd00">黃框</font>)** > Stack Area每一條執行緒有自己的 stack,用來記錄method被調用的先後順序,由main thread開始;而thread其stack的『出入點』則是由 PC Registers 來記錄。常見的錯誤有 StackOverFlowError,為無窮迴圈或遞迴狀態下讓Register爆掉所產生。 ## **Native Method Stack 與 Native Method Interface 與 Native Method Library(<font color="#00dd00">綠框</font>)** > Native Method Stack 存放(登記)非java方法的調用,讓execution engine可以藉由JNI來調用第3方dll(動態連結庫)來完成互動,進而得出結果,因此,也可以說JNI是為了JAVA能調用其它編程語言而產生的介面。 ## **Method area 與 heap area(<font color="#0000dd">藍框</font>)** > class檔被讀入後,其 static 屬性/方法/建構子將存入 method area備用,建立物件時它們會被調用。當object被創建出來,將被存放至heap area,heap area中的物件不再被stack當成參考時,那麼它將逃不過下一次的gc。當此區爆掉時會產生Out of memory的錯誤。 ###### tags: `學習筆記` `JAVA` `JVM`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.