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