1. 程式人生 > >理解Java虛擬機中的棧、堆、堆棧

理解Java虛擬機中的棧、堆、堆棧

線程 常量 9.png lan 和數 編譯器 對象 堆棧 棧區

技術分享圖片

技術分享圖片

JAVA的JVM的內存可分為3個區:堆(heap)、棧(stack)和方法區(method)

  • 棧區:
  1. 每個線程包含一個棧區,棧中只保存方法中(不包括對象的成員變量)的基礎數據類型和自定義對象的引用(不是對象),對象都存放在堆區中
  2. 每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。
  3. 棧分為3個部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)。
  • 堆區:
  1. 存儲的全部是對象實例,每個對象都包含一個與之對應的class的信息(class信息存放在方法區)。
  2. jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身,幾乎所有的對象實例和數組
    都在堆中分配。
  • 方法區:
  1. 又叫靜態區,跟堆一樣,被所有的線程共享。它用於存儲已經被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。

傳送門:https://www.zhihu.com/question/29833675

理解Java虛擬機中的棧、堆、堆棧