溫馨提示×

溫馨提示×

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

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

java中的棧與堆有什么不同

發(fā)布時間:2020-07-01 11:52:13 來源:億速云 閱讀:117 作者:Leah 欄目:編程語言

java中的棧與堆有什么不同?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

在說堆和棧之前,我們先說一下JVM(虛擬機(jī))內(nèi)存的劃分: 

Java程序在運(yùn)行時都要開辟空間,任何軟件在運(yùn)行時都要在內(nèi)存中開辟空間,Java虛擬機(jī)運(yùn)行時也是要開辟空間的。

JVM運(yùn)行時在內(nèi)存中開辟一片內(nèi)存區(qū)域,啟動時在自己的內(nèi)存區(qū)域中進(jìn)行更細(xì)致的劃分,因?yàn)樘摂M機(jī)中每一片內(nèi)存處理的方式都不同,所以要單獨(dú)進(jìn)行管理。

JVM內(nèi)存的劃分有五片:

1.   寄存器;

2.   本地方法區(qū);

3.   方法區(qū);

4.   棧內(nèi)存;

5.   堆內(nèi)存。

我們重點(diǎn)來說一下堆和棧:

棧內(nèi)存:棧內(nèi)存首先是一片內(nèi)存區(qū)域,存儲的都是局部變量,凡是定義在方法中的都是局部變量(方法外的是全局變量),for循環(huán)內(nèi)部定義的也是局部變量,是先加載函數(shù)才能進(jìn)行局部變量的定義,所以方法先進(jìn)棧,然后再定義變量,變量有自己的作用域,一旦離開作用域,變量就會被釋放。

棧內(nèi)存的更新速度很快,因?yàn)榫植孔兞康纳芷诙己芏獭?/p>

堆內(nèi)存:存儲的是數(shù)組和對象(其實(shí)數(shù)組就是對象),凡是new建立的都是在堆中,堆中存放的都是實(shí)體(對象),實(shí)體用于封裝數(shù)據(jù),而且是封裝多個(實(shí)體的多個屬性),如果一個數(shù)據(jù)消失,這個實(shí)體也沒有消失,還可以用,所以堆是不會隨時釋放的,但是棧不一樣,棧里存放的都是單個變量,變量被釋放了,那就沒有了。

堆里的實(shí)體雖然不會被釋放,但是會被當(dāng)成垃圾,Java有垃圾回收機(jī)制不定時的收取。

堆與棧的區(qū)別:

1.棧內(nèi)存存儲的是局部變量而堆內(nèi)存存儲的是實(shí)體;

2.棧內(nèi)存的更新速度要快于堆內(nèi)存,因?yàn)榫植孔兞康纳芷诤芏蹋?/p>

3.棧內(nèi)存存放的變量生命周期一旦結(jié)束就會被釋放,而堆內(nèi)存存放的實(shí)體會被垃圾回收機(jī)制不定時的回收。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

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

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

AI