java 的內存分為兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入一個方法時,
會為這個方法單獨分配一塊私屬存儲空間,用於存儲這個方法內部的局部變量,當這個方法
結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。
堆是與棧作用不同的內存,一般用於存放不放在當前方法棧中的那些數據,例如,使用 new
創建的對象都放在堆里,所以,它不會隨方法的結束而消失。 方法中的局部變量使用 final
修飾后,放在堆中,而不是棧中。
會為這個方法單獨分配一塊私屬存儲空間,用於存儲這個方法內部的局部變量,當這個方法
結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。
堆是與棧作用不同的內存,一般用於存放不放在當前方法棧中的那些數據,例如,使用 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(); 則在堆內存中分配空間