Heap和Stack的區別


我的答案:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM