Java把內存分紅兩種,堆內存和棧內存。java
1>棧內存:函數中定義的基本變量以及對象的引用變量在函數的棧內存中分配,在代碼塊中定義基本變量就在棧中爲變量分配內存空間,當超過變量的做用域後,Java會釋放掉變量佔用的空間,供其餘變量來使用;數組
2>堆內存:存放new出來的對象和數組,堆中分配的對象由java虛擬機的垃圾回收器來管理;在堆中定義個對象後,能夠在棧中定義一個特殊的變量,取值等於堆中的數組或對象的首地址,棧中的這個變量就是堆中對象的引用,在程序中就能夠經過棧中變量的引用訪問堆中對象或數組。這個棧中的引用變量在超過變量的做用域後被釋放,可是堆中對象或數組佔據的空間不會被釋放,數組和對象在沒有引用指向它的時候才變爲垃圾,但仍然佔據空間不釋放,等待隨後一個不肯定的時間被垃圾回收器回收掉。函數