堆疊記憶體和堆疊記憶體的區別:
#1、堆疊記憶體用來存放基本類型的變數和參考變量,堆記憶體用來儲存java中的對象,無論是成員變量,局部變量,還是類別變量,他們指向的對像都儲存在堆記憶體中。
(影片教學推薦:java影片)
2、堆疊記憶體歸屬於單一線程,每個執行緒都會有一個堆疊內存,其儲存的變數只能在其所屬的線程中可見,即棧記憶體可以理解成線程的私有記憶體;堆記憶體中的物件對所有執行緒可見。堆記憶體中的物件可以被所有執行緒存取。
3、如果堆疊記憶體沒有可用的空間儲存方法呼叫和局部變量,JVM會拋出java.lang.stackoverflowerror 錯誤;如果是堆疊記憶體內有可用的空間儲存產生的對象,jvm會拋出java.lang.outofmemoryerror錯誤。
3、堆疊的記憶體要遠遠小於堆疊內存,如果你使用遞歸的話,那麼你的堆疊會很快充滿。 -Xss設定每個執行緒堆疊記憶體的大小 -Xms可以設定堆疊記憶體開始時的大小。
總結:
JVM 中堆疊和堆疊屬於不同的記憶體區域,使用目的也不同。棧常用於保存方法幀和局部變量,而物件總是在堆上分配。棧通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享。
推薦教學:java開發入門
#以上是java中棧記憶體和堆記憶體有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!