java儲存機制
阿新 • • 發佈:2018-11-09
儲存位置介紹:
1、堆:new出來的物件。
2、棧:基本型別的變數資料、物件的引用。
3、靜態域:存放靜態成員(static定義)。
4、暫存器:最快的儲存區,由編譯器分配,程式無法控制。
5、常量池:存放字串常量和基本型別常量(static final)。
例項介紹:
對於以上這段程式碼,date為區域性變數,i,d,m,y都是形參為區域性變數,day,month,year為成員變數。下面分析一下程式碼執行時候的變化:
1. main方法開始執行:int date = 9;
date區域性變數,基礎型別,引用和值都存在棧中。
2. Test test = new Test();
test為物件引用,存在棧中,物件(new Test())存在堆中。
3. test.change(date);
i為區域性變數,引用和值存在棧中。當方法change執行完成後,i就會從棧中消失。
4. BirthDate d1= new BirthDate(7,7,1970);
d1 為物件引用,存在棧中,物件(new BirthDate())存在堆中,其中d,m,y為區域性變數儲存在棧中,且它們的型別為基礎型別,因此它們的資料也儲存在棧中。 day,month,year為成員變數,它們儲存在堆中(new BirthDate()裡面)。當BirthDate構造方法執行完之後,d,m,y將從棧中消失。
5.main方法執行完之後,date變數,test,d1引用將從棧中消失,new Test(),new BirthDate()將等待垃圾回收。