JVM堆和棧的區別


物理地址

堆的物理地址分配對對象是不連續的。因此性能慢些。在GC的時候也要考慮到不連續的分配,所以有各種算法。比如,標記-消除,復制,標記-壓縮,分代(即新生代使用復制算法,老年代使用標記——壓縮)

棧使用的是數據結構中的棧,先進后出的原則,物理地址分配是連續的。所以性能快。

內存分別

堆因為是不連續的,所以分配的內存是在運行期確認的,因此大小不固定。

棧是連續的,所以分配的內存大小要在編譯期就確認,大小是固定的。

存放的內容

堆存放的是對象的實例和數組。因此該區更關注的是數據的存儲

棧存放:局部變量,操作數棧,返回結果。該區更關注的是程序方法的執行。

PS:

  1. 靜態變量放在方法區
  2. 靜態的對象還是放在堆。

程序的可見度

堆對於整個應用程序都是共享、可見的。

棧只對於線程是可見的。所以也是線程私有。他的生命周期和線程相同。

參考資源

  1. Java中堆和棧的區別詳解
  2. Java中堆內存和棧內存詳解
  3. JAVA中堆和棧的區別
  4. 什么是堆和棧,它們在哪兒?


免責聲明!

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



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