物理地址
堆的物理地址分配對對象是不連續的。因此性能慢些。在GC的時候也要考慮到不連續的分配,所以有各種算法。比如,標記-消除,復制,標記-壓縮,分代(即新生代使用復制算法,老年代使用標記——壓縮)
棧使用的是數據結構中的棧,先進后出的原則,物理地址分配是連續的。所以性能快。
內存分別
堆因為是不連續的,所以分配的內存是在運行期
確認的,因此大小不固定。
棧是連續的,所以分配的內存大小要在編譯期
就確認,大小是固定的。
存放的內容
堆存放的是對象的實例和數組。因此該區更關注的是數據的存儲
棧存放:局部變量,操作數棧,返回結果。該區更關注的是程序方法的執行。
PS:
- 靜態變量放在方法區
- 靜態的對象還是放在堆。
程序的可見度
堆對於整個應用程序都是共享、可見的。
棧只對於線程是可見的。所以也是線程私有。他的生命周期和線程相同。