Java虛擬機在執行Java程式的程序中會把它所管理的記憶體劃分成為若干個不同的資料區域,
- 程式計數器(Program Counter Register)
每一個執行緒都有一個程式計數器,各執行緒之間互不影響,獨立存盤,屬于執行緒的私有記憶體,如果執行緒正在執行一個Java方法,這個計數器記錄的是正在執行的虛擬機位元組碼指令地址;如果正在執行的是Native方法,這個計數器則為空(Undefined),此記憶體區域是唯一一個在Java虛擬機規范中沒有規定任何OutOfMemoryError情況的區域,
- Java虛擬機堆疊(Java Virtual Machine Stacks)
與程式計數器一樣,Java虛擬機堆疊也是執行緒私有的,它的生命周期與執行緒相同,虛擬機堆疊描述的是Java方法執行的記憶體模型:每個方法在執行的時候都會創建一個堆疊幀(Stack Frame)用于存盤區域變數表、運算元堆疊、動態鏈接、方法出口等資訊,每一個方法從呼叫直至執行完成的全程序,就對應著一個堆疊幀在虛擬機堆疊中入堆疊到出堆疊的程序,
- 本地方法堆疊
本地方法堆疊(Native Method Stack)與虛擬機堆疊發揮的作用是非常相似的,它們之間的區別不過是虛擬機堆疊為虛擬機執行Java方法服務,而本地方法堆疊則為虛擬機使用到的Native方法服務,
- Java堆(Heap)
Java堆是虛擬機所管理的記憶體中最大的一塊,Java堆是被所有執行緒共享的一塊記憶體區域,在虛擬機啟動時創建,此記憶體區域的唯一目的就是存放物件實體,幾乎所有的物件實體都在這里分配記憶體(有些物件實體在Java虛擬機堆疊中分配),
- 方法區(Method Area)
方法區與Java堆一樣,是各個執行緒共享的記憶體區域,它用于存盤已被虛擬機加載的類資訊、常量、靜態變數、即時編譯器編譯后的代碼等資料,
- 運行時常量池(Runtime Constant Pool)
運行時常量池是方法區的一部分,Class檔案中除了有類的版本、欄位、方法、介面等描述資訊外,還有一項資訊是常量池(Constant Pool Table),用于存放編譯器生成的各種字面量和符號參考,這部分內容將在類加載后進入方法區的運行時常量池中存放,
- 直接記憶體(Direct Memory)
直接記憶體并不是虛擬機運行時資料區的一部分,也不是Java虛擬機規范中定義的記憶體區域,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143911.html
標籤:Java
下一篇:Java中的參考
