有途教育

java堆和棧的區(qū)別

吳佳琪 2023-05-05 17:28:06

java堆是在程序運(yùn)行時(shí),而不是在程序編譯時(shí),申請(qǐng)某個(gè)大小的內(nèi)存空間。即動(dòng)態(tài)分配內(nèi)存,對(duì)其訪問(wèn)和對(duì)一般內(nèi)存的訪問(wèn)沒(méi)有區(qū)別。棧是先進(jìn)后出的,但是于堆而言卻沒(méi)有這個(gè)特性,兩者都是存放臨時(shí)數(shù)據(jù)的地方。

java堆和棧的區(qū)別

JVM棧(Java Virtual Machine Stacks): Java中一個(gè)線程就會(huì)相應(yīng)有一個(gè)線程棧與之對(duì)應(yīng),因?yàn)椴煌木€程執(zhí)行邏輯有所不同,因此需要一個(gè)獨(dú)立的線程棧,因此棧存儲(chǔ)的信息都是跟當(dāng)前線程(或程序)相關(guān)信息的,包括局部變量、程序運(yùn)行狀態(tài)、方法返回值、方法出口等等。每一個(gè)方法被調(diào)用直至執(zhí)行完成的過(guò)程,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò)程。

堆(Heap): 堆是所有線程共享的,主要是存放對(duì)象實(shí)例和數(shù)組。處于物理上不連續(xù)的內(nèi)存空間,只要邏輯連續(xù)即可。

方法區(qū)(Method Area): 屬于共享內(nèi)存區(qū)域,存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。

常量池(Runtime Constant Pool): 它是方法區(qū)的一部分,用于存放編譯期生成的各種字面量和符號(hào)引用。

熱門(mén)推薦

最新文章