1. 程式人生 > 實用技巧 >java記憶體分配

java記憶體分配

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修飾符來描述一個方法是本地方法。