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