1. 程式人生 > >java 棧記憶體 和 堆 記憶體的涵義及使用範圍

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]);   
    }

    
}