我的答案:
1.棧是用來存放基本類型的變量和引用類型的變量,堆用來存放new出來的對象和數組。
2.棧的存取速度快,但不靈活。堆的存取速度慢,但是存取靈活,空間動態分配。
3.棧在建立在連續的物理位置上,而堆只需要邏輯位置連續即可。
4.堆是JVM運行時最大的內存區域。
巨佬的答案:
Java的內存分為兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入一個方法時,會為這個方法單獨分配一塊私屬存儲空間,用於存儲這個方法內部的局部變量,當這個方法結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。
堆是與棧作用不同的內存,一般用於存放不放在當前方法棧中的那些數據,例如,使用new創建的對象都放在堆里,所以,它不會隨方法的結束而消失。方法中的局部變量使用final修飾后,放在堆中,而不是棧中。
1.heap是堆,stack是棧。
2.stack的空間由操作系統自動分配和釋放,heap的空間是手動申請和釋放的,heap常用new關鍵字來分配。
3.stack空間有限,heap的空間是很大的自由區。
在Java中,
若只是聲明一個對象,則先在棧內存中為其分配地址空間,
若再new一下,實例化它,則在堆內存中為其分配地址。
4.舉例:
數據類型 變量名;這樣定義的東西在棧區。
如:Object a =null; 只在棧內存中分配空間
new 數據類型();或者malloc(長度); 這樣定義的東西就在堆區
如:Object b =new Object(); 則在堆內存中分配空間
參考資料:http://www.cnblogs.com/perfy/archive/2012/09/06/2672946.html