1. 程式人生 > >java堆疊記憶體解釋

java堆疊記憶體解釋


1java資料儲存空間的分類

java程式為了提高程式效率,就對資料進行了不同空間分配,具體的分配是劃分為如下5個記憶體空間:

棧:存放的是區域性變數

堆:存放的是所有new出來的東西

方法區:(面型物件講解的內容,現在不講解)

本地方法區:(和系統相關)

暫存器:(CPU使用)


由於此處僅對陣列到討論,故後面三者將不再此處進行講解。



2堆疊記憶體解釋

陣列操作中,在堆記憶體中儲存的的永遠是陣列的名稱,只開闢堆記憶體空間的陣列是永遠無法使用的,必須有指向的堆記憶體才能使用,要想開闢新的堆記憶體則必須使用關鍵字new,然後只是將此堆記憶體的使用權交給對應的站記憶體空間,而且是一個堆記憶體空間可以同時被幾個棧記憶體空間所指向,即一個人可以有多個名字,一個具體的人就相當於堆記憶體,名字就相當於棧記憶體,如下圖: 


區域性變數::在方法定義中或者方法宣告上的變數都稱區域性變數。


3.堆疊記憶體在陣列中的使用

首先看如下程式碼:

class ArrayDemo4 {
	public static void main(String[] args) {
		//定義第一個陣列
		int[] arr = new int[3];
		arr[0] = 88;
		arr[1] = 33;
		arr[2] = 66;
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println("----");
		
		//定義第二個陣列
		int[] arr2 = new int[3];
		arr2[0] = 22;
		arr2[1] = 44;
		arr2[2] = 55;
		System.out.println(arr2);
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);
		System.out.println("----");
		
		//定義第三個陣列
		int[] arr3 =  arr;
		arr3[0] = 100;
		arr3[1] = 200;
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
	}
}

記憶體分析:


從圖中可以知道,當arr3獲取了arr1 的地址後,其便指向了arr1,修改arr3,其實就是修改arr1

4.小結

本次通過陣列對堆疊記憶體進行了淺顯分析,來連線記憶體空間指向問題。由於技術有限,不能進行深入瞭解,如有錯誤,望批評指正!!