堆和棧都是Java用來在RAM中存放數據的地方。
區別總結:1.存儲數據類型不同 2.線程使用情況不同 3.存取速度不同
堆:
1.提供所有類實例和數組對象存儲區域
2.jvm只有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,只存放對象本身
3.Java的堆是一個運行時數據區,類的對象從堆中分配空間。這些對象通過new等指令建立,通過垃圾回收器來銷燬。
4.堆的優勢是可以動態地分配內存空間,需要多少內存空間不必事先告訴編譯器,因爲它是在運行時動態分配的。
但缺點是,由於需要在運行時動態分配內存,所以存取速度較慢。
棧:
1.每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中
2.每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問。
3.棧中主要存放一些基本數據類型的變量(byte,short,int,long,float,double,boolean,char)和對象的引用。
4.棧的優勢是,存取速度比堆快,棧數據可以共享。但缺點是,存放在棧中的數據佔用多