一、Java虛擬機中內存劃分
1、寄存器
2、本地方法區
3、方法區
4、棧內存
存儲的是局部變量(函數中定義的變量,函數上的參數,語句中的變量),而且局部變量的作用域一結束,該局部變量所佔自動釋放。
5、堆內存
用於存儲數組和對象,也就是實體(封裝多個數據的),凡是new建立的均存儲在堆內存中。
堆內存特點:
① 每個實體(存儲多個數據)都有一個首地址值
② 堆內存中每個變量都會有默認初始化值,根據定義的類型不同數值不同,整數:0 小數:0.0或0.0f
boolean:false char "\u0000"
③ 具有垃圾回收機制
二、數組使用的內存情況
三、數組有關問題
1、當打印數組的首地址時,在控制檯上顯示:[I@128f6ee
[代表是數組型實體,I代表實體中的數據類型是int型,@後面的是哈希值
2、ArrayIndexOutOfBoundsException:
int[] arr = new int[3];
System.out.println(arr[3]);
運行上述程序時,虛擬機會提示“Array Index Out Of Bounds Exception:”,即訪問到數組中不存在的角標時,發生該異常。
3、Null Pointer Exception
int[] arr = new int[3];
arr = null;
System.out.println(arr[0]);
運行上述程序時,虛擬機會提示“Null Pointer Exception:”,即當引用型變量沒有任何實體指向時,還在用其操作實體。就會發生該異常。