jvm學習之java記憶體區域
阿新 • • 發佈:2018-12-05
java虛擬機器在執行java程式的過程中會把它所管理的記憶體劃分為若干不同區域:有些是依賴使用者執行緒的啟動和結束而建立和銷燬的,有的則是隨著虛擬機器程序的啟動而存在。
執行緒共享區域:方法區 、堆。
執行緒隔離(各個執行緒獨有區域)虛擬機器棧、本地方法棧、程式計數器。
方法區 | 虛擬機器棧 | 本地方法棧 |
堆 | 程式計數器 | 程式計數器 |
執行緒共享區域 | 執行緒隔離 | 執行緒隔離 |
方法區:用於儲存已被虛擬機器載入的類資訊、常量、靜態變數
堆:存放物件例項(幾乎所有的物件)
虛擬機器棧:描述的是java方法執行的記憶體模型,也就是每個方法執行時都會建立一個棧幀(stack frame),用於儲存區域性變量表、運算元棧、動態連結、方法出口等資訊。每一個方法的呼叫直至執行完成的過程就是一個棧幀在虛擬機器中的入棧到出棧的過程(劃分記憶體)。(涉及到建立棧幀,劃分記憶體。所以會有兩種異常StackOverflowError,OutOfMemoryError)
本地方法棧:虛擬機器native方法執行記憶體。
程式計數器:執行緒執行位元組碼行號指示器(當做路燈或者節點開關:也就是多執行緒切換分配處理器後的執行位置的指示)