系統方面的堆和棧
一、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操做方式相似於數據結構中的棧。
二、堆區(heap)— 是一個可動態申請的內存空間(其記錄空閒內存空間的鏈表由操做系統維護),在java中,全部使用new xxx()構造出來的對象都在堆中存儲通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式卻是相似於鏈表。
堆是全局的,堆棧是每一個函數進入的時候分一小塊,函數返回的時候就釋放了,靜態和全局變量,new獲得的變量,都放在堆中,局部變量放在棧中,因此函數返回,局部變量就全沒了java
棧(stack)與堆(heap)都是Java用來在Ram中存放數據的地方。與C++不一樣,Java自動管理棧和堆,程序員不能直接地設置棧或堆。程序員
棧的優點是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是肯定的,缺少靈活性。另外,棧數據能夠共享,詳見第3點。
堆(能夠共享)的優點是能夠動態地分配內存大小,全部使用new xxx()構造出來的對象都在堆中存儲,生存期也沒必要事先告訴編譯器,Java的垃圾收集器會自動收走這些再也不使用的數據。但缺點是,因爲要在運行時動態分配內存,存取速度較慢。數據結構
如Integer, String, Double等將相應的基本數據類型包裝起來的類。這些類數據所有存在於堆中,Java用new()語句來顯示地告訴編譯器,在運行時才根據須要動態建立,所以比較靈活,但缺點是要佔用更多的時間。ide