java 棧記憶體 和 堆 記憶體的涵義及使用範圍
class FunctionDemo
{
/*陣列記憶體空間的區域劃分\
1、暫存器
2、本地方法區
3、方法區
4、棧記憶體
//棧記憶體的涵義:
1、儲存的區域性變數 ----區域性變數對應的方法要先進棧,對應的變數才能進棧
區域性變數:
1、定義在方法中的變數,比如函式內部的函式】
2、迴圈語句中內部定義的區域性變數
2、變數所屬的作用域一旦結束,該變數自動釋放
5、堆記憶體
//堆儲存的陣列和物件(陣列就是物件),凡是 new 就建立在堆中
堆的特點:
1、每一個實體都有首地址值
2、堆記憶體的變數 預設會初始化值,棧不會預設初始化值.根據型別的不同而不同 :整數:0;小數:0.0或者0.0f;boolean:false;char:'\u0000'
3、堆內數釋放組或物件 使用完畢後就變為無用的記憶體,需要自動回收,存在不適用的記憶體自動回收機制。【優於C++】
int arr[] = new int[3]
arr[0]=50;
arr =null;
*/
public static void main(String[] args)
{
//區域性程式碼塊,限定區域性變數的生命週期
{
int age=10; //區域性變數
}
int [] arr = new int[3];
arr[0] =80;
System.out.println(arr[0]);
for(i=10;i<=20;i++)//i 為區域性變數
System.out.println(age); //age 不可打印出來,因為在區域性程式碼塊區域中
// 兩個陣列對應之間的賦值及釋放
int x[]= new int [3];
int y[] =new int [3];
x[0]=9;
y[0]=34;
//x = y ; //也就是 y 值賦給 X x[0] =34;
y = null;// y不在堆中指向,已釋放,變為不需要的內容,;此事 x 還是正常指向的
System.out.println(x[0]);
}
}