首頁  >  文章  >  Java  >  棧記憶體、堆疊記憶體與方法區的關係分析

棧記憶體、堆疊記憶體與方法區的關係分析

王林
王林轉載
2020-07-30 16:37:282547瀏覽

棧記憶體、堆疊記憶體與方法區的關係分析

先看一下程式碼:

(推薦教學:java入門教學

package cn.liang.jvm;
    public class SimpleHeap {	
            private int id;	
            public SimpleHeap(int id){		
                this.id = id;
	    }	
        public void show(){
	    System.out.println("My ID is " + id);
	}	
        public static void main(String[] args) {
		SimpleHeap s1 = new SimpleHeap(1);
		SimpleHeap s2 = new SimpleHeap(2);
		s1.show();
		s2.show();
	}
}

關係圖:

棧記憶體、堆疊記憶體與方法區的關係分析

(視訊教學推薦:java視訊教學

  • #SimpleHeap實例本身分配在堆記憶體中

  • 描述SimpleHeap類別的資訊存放在方法區

  • #main()函數中s1和s2局部變數存放在Java棧記憶體中,並指向堆記憶體的兩個實例

堆區:

1、儲存的全部是對象,每個物件都包含一個與之對應的class的資訊。 (class的目的在於得到操作指令)

2、jvm只有一個堆區(heap)被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身。

堆疊區:

1、每個執行緒包含一個堆疊區,堆疊中只保存基礎資料型別的物件和自訂物件的參考(不是物件),物件都存放在堆區中

2、每個堆疊中的資料(原始型別和物件參考)都是私有的,其他堆疊不能存取。

3、堆疊分為3個部分:基本類型變數區、執行環境上下文、操作指令區(存放操作指令)。

方法區:

1、又叫靜態區,跟堆一樣,被所有的執行緒共用。方法區包含所有的class和static變數。

2、方法區包含的都是在整個程式中永遠唯一的元素,如class,static變數。

以上是棧記憶體、堆疊記憶體與方法區的關係分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除