首頁  >  文章  >  Java  >  如何分辨Java應用中堆疊和堆疊的區別

如何分辨Java應用中堆疊和堆疊的區別

无忌哥哥
无忌哥哥原創
2018-07-19 09:42:592300瀏覽

1.Java中的基本資料型別和物件的參考變數記憶體分配在堆疊上,變數出了作用域自動釋放;引用型別變數記憶體分配在堆疊或常數池(字串常數池,基本型別常數池),即創建的物件存放在堆上。

2.堆疊記憶體的管理透過壓棧彈棧完成,棧基本單位是棧幀,函數呼叫時候透過壓棧創建新的棧幀,呼叫結束後透過彈棧釋放棧幀。堆用來存放運行時所建立的對象,new出來的對像都放在堆上。 JVM是基於堆的虛擬機,每個java程式運行在單獨的JVM實例上,每個JVM實例也對應唯一一個堆,如果一個java程式有多個線程,那麼他們都運行在同一個JVM實例上,這些線程共享堆記憶體。因此,多執行緒存取堆記憶體時候要對堆中資料進行同步。

C 中堆記憶體由開發人員開啟和釋放,java裡有垃圾回收期自動完成釋放,開發人員只需要申請想要的堆空間。

3.Java中在堆中開闢空間存放new的對象,然後棧中引用變量,存放堆中這個對像地址的首地址,透過棧中這個引用變量存放的地址就可以訪問堆中的對象,棧中的引用變數就相當於堆中對象的一個名字。

4.堆疊的存取速度比堆快,堆疊大小和生存期必須確定,堆可以運行時候動態分配內存,生存期不用提前告訴編譯器,因此訪問緩慢。

以上是如何分辨Java應用中堆疊和堆疊的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn