溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java中堆內(nèi)存與棧內(nèi)存的區(qū)別是什么?

發(fā)布時(shí)間:2020-05-18 14:38:33 來源:億速云 閱讀:278 作者:Leah 欄目:編程語言

今天小編給大家分享的是java中堆內(nèi)存與棧內(nèi)存的區(qū)別,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說,一起往下看吧。

1、棧內(nèi)存用來存放基本類型的變量和引用變量,堆內(nèi)存用來存儲(chǔ)java中的對(duì)象,無論是成員變量,局部變量,還是類變量,他們指向的對(duì)象都存儲(chǔ)在堆內(nèi)存中。

2、棧內(nèi)存歸屬于單個(gè)線程,每個(gè)線程都會(huì)有一個(gè)棧內(nèi)存,其存儲(chǔ)的變量只能在其所屬的線程中可見,即棧內(nèi)存可以理解成線程的私有內(nèi)存;堆內(nèi)存中的對(duì)象對(duì)所有線程可見。堆內(nèi)存中的對(duì)象可以被所有線程訪問。

3、如果棧內(nèi)存沒有可用的空間存儲(chǔ)方法調(diào)用和局部變量,JVM會(huì)拋出java.lang.stackoverflowerror 錯(cuò)誤;如果是堆內(nèi)存內(nèi)有可用的空間存儲(chǔ)生成的對(duì)象,jvm會(huì)拋出java.lang.outofmemoryerror錯(cuò)誤。

3、棧的內(nèi)存要遠(yuǎn)遠(yuǎn)小于堆內(nèi)存,如果你使用遞歸的話,那么你的棧會(huì)很快充滿。-Xss設(shè)置每個(gè)線程堆棧內(nèi)存的大小  -Xms可以設(shè)置堆內(nèi)存開始時(shí)的大小。

總結(jié):

JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對(duì)象總是在堆上分配。棧通常都比堆小,也不會(huì)在多個(gè)線程之間共享,而堆被整個(gè) JVM 的所有線程共享。

以上就是java中堆內(nèi)存與棧內(nèi)存的區(qū)別的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI