Java的堆是一個位於隨機訪問存儲器(RAM)的運行時數據區。一般使用new操做符在堆中建立對象,它們不須要程序代碼來顯式的釋放。spa
堆是由垃圾回收來負責的,堆的優點是能夠動態地分配內存大小,生存期也沒必要事先告訴編譯器,由於它是在運行時動態分配內存的,Java的垃圾收集器會自動收走這些再也不使用的數據。對象
但缺點是,因爲要在運行時動態分配內存,存取速度較慢。內存
Java的棧也位於RAM,它的存取速度比堆要快,僅次於寄存器且據能夠共享,主要存放一些基本類型的變量和對象的引用;但存在於棧中的數據大小與生存期必須是肯定的,缺少靈活性。編譯器
棧有一個很重要的特殊性,就是存在棧中的數據能夠共享。編譯
基本數據類型存放到棧變量
引用數據類型存放到堆垃圾回收