Java的堆是壹個運行時數據區,類的對象從中分配空間。這些對象通過new、newarray、anewarray和multianewarray等指令建立,它們不需要程序代碼來顯式的釋放。堆是由垃圾回收來負責的,堆的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些不再使用的數據。但缺點是,由於要在運行時動態分配內存,存取速度較慢。
棧的優勢是,存取速度比堆要快,僅次於寄存器,棧數據可以***享。但缺點是,存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。
棧中主要存放壹些基本類型的變量(,int, short, long, byte, float, double, boolean, char)和對象句柄。 棧有壹個很重要的特殊性,就是存在棧中的數據可以***享。