java記憶體分配
阿新 • • 發佈:2020-10-11
java記憶體分配
更多詳情,請看這個大佬的文章: https://blog.csdn.net/dingguanyi/article/details/80759436.
1.記憶體標示圖
java程式執行時,資料會分割槽存放在JavaStack(Java棧)、 heap(堆)、method(方法區)。
java程式執行時記憶體可分為方法區,棧記憶體,堆記憶體,本地方法棧。
Java執行時資料區域的結構:
記憶體表示圖:
1.1介紹
- 暫存器
暫存器是cpu內部整合的,訪問記憶體時要在cpu的暫存器上填上地址,然後執行相應的指令
- 方法區(存在於堆中)
又叫靜態區, 存放程式程式碼。存放所有的class和靜態變數,方法區存放的是整個程式中唯一的元素,如class和static變數
- 常量池(存在於方法區中)
jvm為每個載入的型別維護一個一個常量池,常量池是這個型別用到的常量的集合。包括直接常量(基本型別、String)和對其他型別、方法、欄位的符號引用。池中的資料和陣列一樣通過索引訪問。
- 堆記憶體
存放的是new出來的物件或者陣列,在堆中分配的記憶體,由JVM自動垃圾回收器來管理。
- 棧記憶體
用來儲存區域性變數的值(定義在方法宣告上和方法中的變數)
1)基本資料型別的值
2)儲存類的例項,即堆區物件的引用(指標)
3)儲存載入方法時的幀
- 本地方法棧
java通過java本地介面JNI(Java Native Interface)來呼叫其他語言編寫的程式,在Java裡面用native修飾符來描述一個方法是本地方法。