本篇內(nèi)容介紹了“java棧與堆是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)是一家專業(yè)提供道里企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為道里眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
所有的java程序在運(yùn)行時(shí),都要在內(nèi)存中開(kāi)辟一個(gè)空間,并且在JVM(java虛擬機(jī))運(yùn)行的時(shí)候,會(huì)分得更加的細(xì)致,虛擬機(jī)中每一片內(nèi)存的處理方式都是不一樣的,所以需要進(jìn)行單獨(dú)的管理。
JVM的內(nèi)存一共分為5種:
寄存器,本地方法區(qū),方法區(qū),堆內(nèi)存,棧內(nèi)存
今天我們主要講堆內(nèi)存與棧內(nèi)存。
棧內(nèi)存:
棧內(nèi)存主要儲(chǔ)存的是局部變量,也就是說(shuō),是定義在方法之內(nèi)的,都叫局部變量。線程執(zhí)行的時(shí)候調(diào)用方法的內(nèi)存模型,當(dāng)方法執(zhí)行的時(shí)候,會(huì)創(chuàng)建一個(gè)叫“棧幀”的內(nèi)存結(jié)構(gòu),棧幀會(huì)儲(chǔ)存該方法內(nèi)用到的局部變量表,操作數(shù)棧、返回地址、動(dòng)態(tài)連接等信息。(這里新手主要了解局部變量表與返回地址就好了,局部變量表顧名思義是用來(lái)儲(chǔ)存局部變量的,方法返回地址,是指方法在運(yùn)行過(guò)程中,可能會(huì)正常退出,也可能會(huì)異常退出,但是不管哪種退出方式,都要讓調(diào)用者知道方法退出的位置,方法返回地址就是用來(lái)確定退出位置的。)一個(gè)方法從方法被調(diào)用開(kāi)始,到方法執(zhí)行結(jié)束,就是一個(gè)棧幀在java棧中從入棧到出棧的全過(guò)程。
堆內(nèi)存:
堆內(nèi)存儲(chǔ)存的是對(duì)象,也就是new出來(lái)的都在堆里,堆中存放的都是實(shí)體(對(duì)象),實(shí)體用于封裝數(shù)據(jù),而且是封裝多個(gè)(實(shí)體的多個(gè)屬性),如果一個(gè)數(shù)據(jù)消失,這個(gè)實(shí)體也沒(méi)有消失,還可以用,所以堆是不會(huì)隨時(shí)釋放的,但是棧不一樣,棧里存放的都是單個(gè)變量,變量被釋放了,那就沒(méi)有了。堆里的實(shí)體雖然不會(huì)被釋放,但是會(huì)被當(dāng)成垃圾,Java有垃圾回收機(jī)制不定時(shí)的收取。
通俗一點(diǎn)說(shuō)堆和棧的區(qū)別:堆主要用來(lái)存放對(duì)象的,棧主要用來(lái)執(zhí)行程序的。
那么棧和堆有什么不同呢,我們可以從幾個(gè)方面看待他們的不同!
順序:
棧是先進(jìn)后出,堆是先進(jìn)先出
緩存:
棧使用的是一級(jí)緩存, 他們通常都是被調(diào)用時(shí)處于存儲(chǔ)空間中,調(diào)用完畢立即釋放;
堆是存放在二級(jí)緩存中,生命周期由虛擬機(jī)的垃圾回收算法來(lái)決定(并不是一旦成為孤兒對(duì)象就能被回收)。所以調(diào)用這些對(duì)象的速度要相對(duì)來(lái)得低一些。
內(nèi)存回收:
棧內(nèi)存存放的變量生命周期一旦結(jié)束就會(huì)被釋放,而堆內(nèi)存存放的實(shí)體會(huì)被垃圾回收機(jī)制不定時(shí)的回收。
申請(qǐng)效率:
棧:由系統(tǒng)自己分配,速度較快,但是程序員無(wú)法掌握。
堆:一般有兩種方法來(lái)申請(qǐng)內(nèi)存,new和malloc,new是一種用算符而malloc是函數(shù)。由程序員申請(qǐng)出來(lái)的內(nèi)存一般速度比較慢,而卻容易產(chǎn)生內(nèi)存碎片,不過(guò)用起來(lái)比較方便,獲取的空間大,也相對(duì)較靈活。
“java棧與堆是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!