亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java虛擬機的堆,棧,堆棧如何去理解?

Java虛擬機的堆,棧,堆棧如何去理解?

IT作家 2016-01-29 11:16:01
查看完整描述

2 回答

已采納
?
i愛慕客

TA貢獻41條經驗 獲得超61個贊

最主要的區別就是棧內存用來存儲局部變量和方法調用吧。

堆內存用來存儲Java中的對象。無論是成員變量,局部變量,還是類變量,它們指向的對象都存儲在堆內存中。

獨有還是共享

棧內存歸屬于單個線程,每個線程都會有一個棧內存,其存儲的變量只能在其所屬線程中可見,即棧內存可以理解成線程的私有內存。
而堆內存中的對象對所有線程可見。堆內存中的對象可以被所有線程訪問。

異常錯誤

如果棧內存沒有可用的空間存儲方法調用和局部變量,JVM會拋出java.lang.StackOverFlowError。
而如果是堆內存沒有可用的空間存儲生成的對象,JVM會拋出java.lang.OutOfMemoryError。

空間大小

棧的內存要遠遠小于堆內存,如果你使用遞歸的話,那么你的棧很快就會充滿。如果遞歸沒有及時跳出,很可能發生StackOverFlowError問題。
你可以通過-Xss選項設置棧內存的大小。-Xms選項可以設置堆的開始時的大小,-Xmx選項可以設置堆的最大值。

這就是Java中堆和棧的區別。理解好這個問題的話,可以對你解決開發中的問題,分析堆內存和棧內存使用,甚至性能調優都有幫助。




查看完整回答
6 反對 回復 2016-01-29
  • beckzl
    beckzl
    謝謝,回答真好,理解又到了新高度。
?
強qiang

TA貢獻3條經驗 獲得超3個贊

簡單點,就是棧比較小,只存儲小的東西,存屬性,和地址。堆就比較大的地方,存具體的值啊,類啊,省下的一些。

查看完整回答
反對 回復 2016-02-24
  • 2 回答
  • 3 關注
  • 2345 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號