分配
程序員通過new為每個對象申請內存空間(基本類型除外),所有對象都在堆中分配空間;釋放:對象的釋放是由垃圾回收機制決定和執行的。
Java內存分為兩種:棧內存和堆內存
(1)在函數中定義的基本類型變量(即基本類型的局部變量)和對象的引用變量(即對象的變量名)都在棧內存中分配;
(2)堆內存用來存儲由new創建的對象和數組以及對象的實例變量(即全局變量)
(3)堆的優勢是可以動態分配內存大小,生存期也不必事先告訴編譯器,因為它是運行時動態分配內存的;缺點是運行時動態分配內存,存取速度慢;
(4)棧的優點是存取速度較快僅僅次於CPU中的寄存器,且棧數據可以共享;但是棧中的數據大小和生存期是必須確定的,缺乏靈活性;
(5)只有一個堆區被所有線程共享,堆區不存放基本類型和對象引用只存放對象本身
(6)每個線程包含一個棧區,保存基礎數據類型的對象和自定義對象的引用,每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問
還有一個方法區:存儲所有對象數據共享區域,存儲靜態變量和普通方法、靜態方法、常量、字符串常量等信息,又叫靜態區,是所有線程共享的。
Java對象銷毀
Java中垃圾收集器自動地定期掃描Java對象的動態內存,並將所有的引用對象加上標記,在對象運行結束后(無引用變量對該對象進行關聯),清除其標記,並將所有無標記的對象作為垃圾進行回收,釋放垃圾對象所占的內存空間。
對象運行結束后或生命周期結束時,將成為垃圾對象,但並不意味着就立即會被回收,僅當垃圾收集器空閑或內存不足時,才會回收他們。
Java中每個對象都擁有一個finalize()方法:
垃圾回收器在回收對象時自動調用對象的finalize()方法來釋放系統資源。
參考:https://www.cnblogs.com/liufangdekele/p/6118979.html
參考:http://www.jb51.net/article/64258.htm
