Java中的地址分配

scbiaosdo發表於2018-04-12

棧:

存放基本型別的資料和物件的引用,但物件本身不存放在棧中,而是存放在堆中。當在一段程式碼塊定義一個變數時,Java就在棧中為這個變數分配記憶體空間,當該變數退出該作用域後,Java會自動釋放掉為該變數所分配的記憶體空間,該記憶體空間可以立即被另作他用。實際上,棧中的變數指向堆記憶體中的變數,這就是Java中的指標!

堆:

存放用new產生的資料。在堆中分配的記憶體,由Java虛擬機器的自動垃圾回收器來管理。在堆中產生了一個陣列或物件後,還可以 在棧中定義一個特殊的變數,讓棧中這個變數的取值等於陣列或物件在堆記憶體中的首地址,棧中的這個變數就成了陣列或物件的引用變數。  陣列和物件在沒有引用變數指向它的時候,才變為垃圾,不能在被使用,但仍 然佔據記憶體空間不放,在隨後的一個不確定的時間被垃圾回收器收走(釋放掉)。這也是 Java 比較佔記憶體的原因。

靜態域:

存放在物件中用static定義的靜態成員

相關文章