JVM記憶體模型

在JVM8的規範中,是以Runtime Data Area出現的,主要包含兩部分:

1.JVM啟動時創建,退出時銷毀;

2.執行緒區域,執行緒啟動時創建,退出時銷毀。

具體包括以下組成部分:

1.pc register,即為 program counter,用來記錄method 的return address。

2.JVM stacks: 每一個執行緒創建時,對應的stack也被創建出來,存放本地變數和部分方法調用的返回結果。 stack的記憶體區域無需連續。注意,如果執行緒運行時需要的記憶體大於stack的容許值,則會stackoverflow error。如果jvm stacks的空間允許動態擴展,但是沒有更多記憶體可以用來創建新thread時,會OutofMemoryError

3.Heap : 在jvm threads 間共享的區域。heap中存放 classes instances 和 arrays。JVM啟動時,heap被創建。如果需要的記憶體超過的heap的值,則OutOfMemoryError

4.Mehod Area : Mehod is shared  among all JVM threads. 存放class的constant pool,fields, method和constrctor的程式碼(類似於程式碼區或者文本區); JVM啟動時創建。邏輯上 method area屬於heap的一部分。

5.Runtime Constant pool. 位於 JVM method area。如果需要的空間不夠了,則ooe。可以理解成每個class或者interface被jvm創建時,會在method area創建一個pool,類似於a table,內容包括數值常量,引用地址?

6.Native method area: for native thread.

需要加入一張圖來解釋 JVM heap