搜尋
首頁JavaJava入門java 堆和堆疊的差別有哪些

java 堆和堆疊的差別有哪些

Nov 11, 2019 pm 05:09 PM
java差別堆疊堆疊

java 堆和堆疊的差別有哪些

Java中存在堆疊這樣一個後進先出(Last In First Out)的順序的資料結構,這就是java.util.Stack。這種情況下,不免讓很多人更費解前面的問題。事實上,堆和棧都是記憶體中的一部分,有著不同的作用,而且一個程式需要在這片區域上分配記憶體。眾所周知,所有的Java程式都運行在JVM虛擬機器內部,我們這裡介紹的自然是JVM(虛擬)記憶體中的堆疊和堆疊。

區別

java中堆疊和堆疊的區別自然是面試中的常見問題,下面幾點就是其具體的區別:

#各司其職

最主要的差異就是堆疊記憶體用來儲存局部變數和方法呼叫。

而堆記憶體用來儲存Java中的物件。無論是成員變量,局部變量,還是類別變量,它們指向的物件都儲存在堆記憶體中。

獨有還是共享

堆疊記憶體歸屬於單一線程,每個線程都會有一個堆疊內存,其儲存的變數只能在其所屬線程中可見,即棧記憶體可以理解成線程的私有記憶體。

而堆記憶體中的物件對所有執行緒可見。堆記憶體中的物件可以被所有執行緒存取。

異常錯誤

如果堆疊記憶體沒有可用的空間儲存方法呼叫和局部變量,JVM會拋出java.lang.StackOverFlowError。

而如果是堆記憶體沒有可用的空間儲存產生的對象,JVM會拋出java.lang.OutOfMemoryError。

空間大小

堆疊的記憶體要遠遠小於堆內存,如果你使用遞歸的話,那麼你的堆疊很快就會充滿。如果遞迴沒有及時跳出,很可能發生StackOverFlowError問題。

你可以透過-Xss選項設定堆疊記憶體的大小。 -Xms選項可以設定堆的開始時的大小,-Xmx選項可以設定堆的最大值。

這就是Java中堆疊和堆疊的差別。理解好這個問題的話,可以對你解決開發中的問題,分析堆疊記憶體和堆疊記憶體使用,甚至效能調優都有幫助。

php中文網,大量的免費Java入門教學,歡迎線上學習!

以上是java 堆和堆疊的差別有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境