java堆和棧的理解2018-12-05

????java在運(yùn)行程序時(shí)乌妙,在內(nèi)存中劃分了5片空間進(jìn)行數(shù)據(jù)的存儲(chǔ)。分別是:存儲(chǔ)器建钥、本地方法區(qū)藤韵、方法區(qū)、棧锦针、堆荠察。

在Java項(xiàng)目開(kāi)發(fā)中置蜀,掌握堆heap和棧stack的概念非常重要,相當(dāng)于地基的存在悉盆。

堆和棧的作用

基本數(shù)據(jù)類型盯荤、局部變量都是存放在棧中的,用完就會(huì)消失焕盟。new創(chuàng)建的實(shí)例化對(duì)象及數(shù)組是存放在堆內(nèi)存中的秋秤,用完之后靠垃圾回收機(jī)制(gc)不定期自動(dòng)清除。

換言之脚翘,引用存放在堆中灼卢,值在棧中。gc不定期回收堆中垃圾来农。

示例

public class Test {

public static void main(String[] args) {

int x=1;

? ? ? show();

? ? }

static void show(){

int x=2;

? ? }

}

運(yùn)行main方法鞋真;jvm具體執(zhí)行步驟是:

第1步——main()函數(shù)是程序入口,JVM先執(zhí)行沃于,在棧內(nèi)存中開(kāi)辟一個(gè)空間涩咖,存放int類型變量x,同時(shí)附值1繁莹。

第2步——JVM執(zhí)行show()函數(shù)檩互,在棧內(nèi)存中又開(kāi)辟一個(gè)新的空間,存放int類型變量x咨演,同時(shí)附值2闸昨。此時(shí)main空間與show空間并存,同時(shí)運(yùn)行薄风,互不影響饵较。

第3步——show()執(zhí)行完畢,變量x立即釋放遭赂,空間消失告抄。但是main()函數(shù)空間仍存在,main中的變量x仍然存在嵌牺,不受影響。


public class Test {

public static void main(String[] args) {

int[] x=new int[3];

? ? ? x[0]=20;

? ? }

}

以上程序執(zhí)行步驟

第1步——執(zhí)行int[] x=new int[3];

隱藏以下幾分支

JVM執(zhí)行main()函數(shù)龄糊,在棧內(nèi)存中開(kāi)辟一個(gè)空間逆粹,存放x變量(x變量是局部變量)。

同時(shí)炫惩,在堆內(nèi)存中也開(kāi)辟一個(gè)空間僻弹,存放new int[3]數(shù)組,堆內(nèi)存會(huì)自動(dòng)內(nèi)存首地址值他嚷,如0x0045蹋绽。

數(shù)組在棧內(nèi)存中的地址值芭毙,會(huì)附給x,這樣x也有地址值卸耘。所以退敦,x就指向(引用)了這個(gè)數(shù)組。此時(shí)蚣抗,所有元素均未附值侈百,但都有默認(rèn)初始化值0。

第2步——執(zhí)行x[0]=20

即在堆內(nèi)存中將20附給[0]這個(gè)數(shù)組元素翰铡。這樣钝域,數(shù)組的三個(gè)元素值分別為20,0,0


public class Test {

public static void main(String[] args) {

int[] x=new int[3];

? ? ? x[0]=20;

? ? ? x=null;

? ? }

}

以上步驟執(zhí)行步驟

第1、2步——與示例2完全一樣锭魔,略例证。

第3步——執(zhí)行x=null;

null表示空值,即x的引用數(shù)組內(nèi)存地址0x0045被刪除了迷捧,則不再指向棧內(nèi)存中的數(shù)組织咧。此時(shí),堆中的數(shù)組不再被x使用了党涕,即被視為垃圾烦感,JVM會(huì)啟動(dòng)垃圾回收機(jī)制,不定時(shí)自動(dòng)刪除膛堤。


public static void main(String[] args) {

int[] x=new int[3];

int[] y=x;

y[1]=100;

x=null;

}

以上步驟執(zhí)行步驟

第1步——與示例2第1步一致手趣,略。

第2步——執(zhí)行int[] y=x肥荔,

在棧內(nèi)存定義了新的數(shù)組變量?jī)?nèi)存y绿渣,同時(shí)將x的值0x0045附給了y。所以燕耿,y也指向了堆內(nèi)存中的同一個(gè)數(shù)組中符。

第3步——執(zhí)行y[1]=100

即在堆內(nèi)存中將100附給[0]這個(gè)數(shù)組元素。這樣誉帅,數(shù)組的三個(gè)元素值分別為0,100,0

第4步——執(zhí)行x=null

則變量x不再指向棧內(nèi)存中的數(shù)組了淀散。但是,變量y仍然指向蚜锨,所以數(shù)組不消失档插。


public class Test {

public static void main(String[] args) {

Car c=new Car();

? ? c.color="blue";

? ? Car c1=new Car();

? ? c1.num=1;

? ? }

}

class Car{

public Stringcolor;

? ? public? int num;

}

c 和c1是兩個(gè)不同的對(duì)象,每次new對(duì)象都會(huì)產(chǎn)生不同的實(shí)體亚再;


public class Test {

public static void main(String[] args) {

Car c=new Car();

? ? c.num=5;

? ? Car c1=c;

? ? c1.color="green";

? ? ? ? System.out.println(c.color);//green

? ? }

}

class Car{

public Stringcolor;

? ? public? int num;

}

Car c1=c朽色,這句話相當(dāng)于將對(duì)象復(fù)制一份出來(lái)盹廷,兩個(gè)對(duì)象的內(nèi)存地址值一樣特笋。所以指向同一個(gè)實(shí)體,對(duì)c1的屬性修改耘柱,相當(dāng)于c的屬性也改了。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棍现,一起剝皮案震驚了整個(gè)濱河市调煎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轴咱,老刑警劉巖汛蝙,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異朴肺,居然都是意外死亡窖剑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門戈稿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)西土,“玉大人,你說(shuō)我怎么就攤上這事鞍盗⌒枇耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵般甲,是天一觀的道長(zhǎng)肋乍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)敷存,這世上最難降的妖魔是什么墓造? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮锚烦,結(jié)果婚禮上觅闽,老公的妹妹穿的比我還像新娘。我一直安慰自己涮俄,他們只是感情好蛉拙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著彻亲,像睡著了一般孕锄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苞尝,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天硫惕,我揣著相機(jī)與錄音,去河邊找鬼野来。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踪旷,可吹牛的內(nèi)容都是我干的曼氛。 我是一名探鬼主播豁辉,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舀患!你這毒婦竟也來(lái)了徽级?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤聊浅,失蹤者是張志新(化名)和其女友劉穎餐抢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體低匙,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旷痕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顽冶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欺抗。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖强重,靈堂內(nèi)的尸體忽然破棺而出绞呈,到底是詐尸還是另有隱情,我是刑警寧澤间景,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布佃声,位于F島的核電站,受9級(jí)特大地震影響倘要,放射性物質(zhì)發(fā)生泄漏圾亏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一碗誉、第九天 我趴在偏房一處隱蔽的房頂上張望召嘶。 院中可真熱鬧,春花似錦哮缺、人聲如沸弄跌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铛只。三九已至,卻和暖如春糠溜,著一層夾襖步出監(jiān)牢的瞬間淳玩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工非竿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜕着,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像承匣,于是被迫代替她去往敵國(guó)和親蓖乘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法韧骗,類相關(guān)的語(yǔ)法嘉抒,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法袍暴,異常的語(yǔ)法些侍,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • 廢話不多說(shuō),自己進(jìn)入今天的主題 1政模、面向?qū)ο蟮奶卣饔心男┓矫妫?答:面向?qū)ο蟮奶卣髦饕幸韵聨讉€(gè)方面: - 抽象:...
    傳奇內(nèi)服號(hào)閱讀 2,351評(píng)論 1 31
  • 秋風(fēng)蕭瑟已經(jīng)過(guò)去岗宣,現(xiàn)在是寒風(fēng)瑟瑟,哆哆嗦嗦了览徒,轉(zhuǎn)眼已經(jīng)入冬狈定。 人間冬至,天堂似乎也是冷了习蓬!這不纽什,大路兩旁燒寒衣紙的...
    徍音_閱讀 283評(píng)論 0 0
  • 很早之前,從一場(chǎng)酒會(huì)上帶回一束鮮花躲叼,味道很好芦缰,淡淡的香味,剛好包裹你的鼻尖枫慷,碰觸你的嘴唇让蕾,一切, 完好的就像此時(shí)的...
    教語(yǔ)文的美術(shù)老師閱讀 390評(píng)論 2 6
  • 以前一直沒(méi)明白活著只為了活著的真意或听。 今天再次翻開(kāi)《活著》這本書(shū)探孝,仔仔細(xì)細(xì)的看了整個(gè)上午,當(dāng)我沒(méi)翻開(kāi)一本值得我再次...
    撿書(shū)先生閱讀 189評(píng)論 0 0