首頁 >Java >Java基礎 >java中棧記憶體和堆記憶體有什麼區別

java中棧記憶體和堆記憶體有什麼區別

王林
王林原創
2020-05-17 15:21:514774瀏覽

java中棧記憶體和堆記憶體有什麼區別

堆疊記憶體和堆疊記憶體的區別:

#1、堆疊記憶體用來存放基本類型的變數和參考變量,堆記憶體用來儲存java中的對象,無論是成員變量,局部變量,還是類別變量,他們指向的對像都儲存在堆記憶體中。

(影片教學推薦:java影片

2、堆疊記憶體歸屬於單一線程,每個執行緒都會有一個堆疊內存,其儲存的變數只能在其所屬的線程中可見,即棧記憶體可以理解成線程的私有記憶體;堆記憶體中的物件對所有執行緒可見。堆記憶體中的物件可以被所有執行緒存取。

3、如果堆疊記憶體沒有可用的空間儲存方法呼叫和局部變量,JVM會拋出java.lang.stackoverflowerror 錯誤;如果是堆疊記憶體內有可用的空間儲存產生的對象,jvm會拋出java.lang.outofmemoryerror錯誤。

3、堆疊的記憶體要遠遠小於堆疊內存,如果你使用遞歸的話,那麼你的堆疊會很快充滿。 -Xss設定每個執行緒堆疊記憶體的大小  -Xms可以設定堆疊記憶體開始時的大小。

總結:

JVM 中堆疊和堆疊屬於不同的記憶體區域,使用目的也不同。棧常用於保存方法幀和局部變量,而物件總是在堆上分配。棧通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享。

 推薦教學:java開發入門

#

以上是java中棧記憶體和堆記憶體有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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