java創(chuàng)建一個(gè)棧 jvm堆和棧的區(qū)別?
jvm堆和棧的區(qū)別?1. 堆棧:每當(dāng)啟動(dòng)一個(gè)新線程時(shí),Java虛擬機(jī)都會(huì)為它分配一個(gè)Java堆棧。JVM將只在Java堆棧上執(zhí)行兩個(gè)操作:堆棧按下或以堆棧幀為單位退出堆棧。每個(gè)線程都包含一個(gè)堆棧區(qū)域,
jvm堆和棧的區(qū)別?
1. 堆棧:每當(dāng)啟動(dòng)一個(gè)新線程時(shí),Java虛擬機(jī)都會(huì)為它分配一個(gè)Java堆棧。JVM將只在Java堆棧上執(zhí)行兩個(gè)操作:堆棧按下或以堆棧幀為單位退出堆棧。每個(gè)線程都包含一個(gè)堆棧區(qū)域,其中只存儲(chǔ)基本數(shù)據(jù)類型的對(duì)象和自定義對(duì)象(而不是對(duì)象)的引用,對(duì)象存儲(chǔ)在堆棧區(qū)域中。
2. 堆:存儲(chǔ)所有對(duì)象,每個(gè)對(duì)象都包含相應(yīng)的類信息——類的目的是獲取操作指令。JVM中的所有線程只共享一個(gè)堆。堆不存儲(chǔ)基本類型和對(duì)象引用,只存儲(chǔ)對(duì)象本身。
在Java里堆內(nèi)存和棧內(nèi)存有什么區(qū)別?
這源于古老的C語(yǔ)言概念。函數(shù)中基本數(shù)據(jù)類型(字符串除外)應(yīng)用的所有局部變量,即函數(shù)退出時(shí)消失的變量,包括函數(shù)本身的參數(shù)定義,都使用堆棧內(nèi)存來(lái)構(gòu)造內(nèi)存。這樣做的目的是輸入函數(shù),將變量值放入堆棧,然后自動(dòng)從堆棧中退出函數(shù)。內(nèi)存應(yīng)用和回收將自動(dòng)完成。這些堆??臻g變量只能由函數(shù)本身引用,不能引用其他函數(shù)。
C語(yǔ)言的全局變量和Java的對(duì)象,即C語(yǔ)言的malloc()函數(shù)和C、Java新構(gòu)造的對(duì)象都在堆組織的內(nèi)存中,因此許多函數(shù)都可以引用這些存儲(chǔ)空間的值或?qū)ο?。存?chǔ)在堆空間中的對(duì)象和數(shù)據(jù)需要根據(jù)程序員的需要進(jìn)行釋放。例如,C語(yǔ)言使用free(),C語(yǔ)言使用析構(gòu)函數(shù),Java具有自動(dòng)循環(huán)機(jī)制。
隨便寫(xiě)。如果你有任何錯(cuò)誤,不要噴。