java堆疊記憶體解釋
阿新 • • 發佈:2019-02-08
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.小結
本次通過陣列對堆疊記憶體進行了淺顯分析,來連線記憶體空間指向問題。由於技術有限,不能進行深入瞭解,如有錯誤,望批評指正!!