更新時間:2020-07-03 15:02:00 來源:動力節點 瀏覽2331次
堆棧,這個名詞很多Java開發者在一開始學習Java的時候就經常聽說了。
對于這個名詞來說,它描述的其實是JVM的內存模型,
如果面試中問到,堆棧具體對應著什么,不知道是否了解?
堆和棧
其實堆棧是兩個東西,在JVM中分別對應兩個不同的內存部分。
對于JVM內存模型來說,只要記住下面這張圖就足夠了,
對于左邊黃色的部分,就是JVM中的“堆”,相對應的右邊的則是"棧"。
堆
在Java中,Heap用來表示堆。我們不作深入的研究,畢竟JVM是個龐大復雜的東西,
這里只基本介紹JVM的基礎知識部分。
比如Heap是用來干啥的?
提示一下,平時經常實例化對象吧?
Student student=new Student();
這里實例化了的對象,就是存放在堆中。
具體的說,是存放在Heap Memory中。
還有,靜態變量也是在這里,還記得上面那張圖嘛,黃色部分分了上下兩個區,
其中一個叫Method Area的區域,是用來存放靜態變量的。
棧
你應該知道大名鼎鼎的爆棧吧,StackOverFlow,
這個網站可能解決了平時我們開發中遇到的90%的問題。
其實stack over flow本身是一種異常,這里的stack說的就是JVM里的棧。
而棧是用來干什么的呢,
舉個例子,平時我們寫的非靜態方法,執行時就在棧里。
雖然這么說不夠準確,因為要說明白方法的執行,需要了解棧幀的概念,但我們這里不作深入的分析。
現在不知道你是否明白,之前見過的stack over flow異常是怎么回事。
如果足夠好奇的話,
可以嘗試寫一個遞歸方法,
public boolean recursive(){....return recursive();}
然后嘗試讓這個遞歸無限的嵌套下去,
你就會看到StackOverFlowException了,
原因就是因為stack內存不足以運行方法。
總結
所以總的來說,JVM分為Head和Stack兩個部分
對于初學者,只要初步了解了這個基礎,基本能應付開發中遇到的問題。
但如果想要提高自己,最終都需要深入了解JVM的內存模型。
以上就是動力節點java培訓機構的小編針對“Java高級課程之Java堆內存和棧內存的區別”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習