一、空間分配不同:
1、堆區(heap)— 由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表。
2、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。
二、分配空間不同:
1.、Java的堆是一個運行時數據區,類的對象從堆中分配空間。這些對象通過new等指令建立,通過垃圾回收器來銷燬。
2 、棧中主要存放一些基本數據類型的變量(byte,short,int,long,float,double,boolean,char)和對象的引用。
三、緩存方式不同:
1、堆是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定。所以,調用這些對象的速度相對來得低一些。
2、棧使用的是一級緩存,通常被調用時處於存儲空間中,調用完畢立即釋放。
四、數據結構不同:
1、堆的數據結構可以被看成是一棵樹,如堆排序。
2、棧是一種先進後出的數據結構。
(推薦課程:Java基礎技術詳解)