1 棧
1.1 什么是棧石挂?
它是在運(yùn)行java程序時(shí)啤月,java虛擬機(jī)從計(jì)算機(jī)內(nèi)存中申請(qǐng)的一塊空間挂滓,這塊空間的結(jié)構(gòu)就好像一種特殊的隊(duì)列,遵循著后進(jìn)先出的原則莹妒。你可以將它想象成一個(gè)放置乒乓球的圓柱形球筒。當(dāng)你往里面放置乒乓球绰上,裝滿之后在往外取旨怠,最后放進(jìn)去的球,通常被最先取出來(lái)蜈块。這就叫后進(jìn)先出鉴腻。
1.2 什么東西放在棧里?
局部變量百揭,方法調(diào)用
1.3 放在棧里的東西是如何被消費(fèi)的爽哎?
舉個(gè)例子:當(dāng)某段程序調(diào)用doStuff方法使得doStuff方法被放在最上方的棧塊中,doStuff方法又調(diào)用了go方法,go就又被放在棧頂器一,go又調(diào)用了crazy方法课锌,使得現(xiàn)在crazy被推至棧頂,當(dāng)crazy執(zhí)行完之后祈秕,它的棧塊被釋放掉渺贤,執(zhí)行又回到go,以此類推请毛,直到doStuff方法被執(zhí)行完后志鞍,棧才被完全清空。
1.4 什么是局部變量方仿?
聲明在方法中變量固棚,方法的參數(shù)统翩。它們是暫時(shí)的,生命周期僅限于方法被放在棧上的這段時(shí)間玻孟。有一種特殊的局部變量唆缴,在方法中引用的實(shí)例對(duì)象,變量只保存對(duì)象的引用地址黍翎,真正對(duì)象生存在堆中面徽。
2 堆
2.1 什么是堆?
與棧同樣是java虛擬機(jī)在內(nèi)存中取得的一塊空間匣掸,這塊空間的結(jié)構(gòu)好像一顆樹(shù)趟紊,與棧不同的是堆(heap)是用來(lái)存放對(duì)象的。
2.2 什么東西放在堆中碰酝?
實(shí)例對(duì)象霎匈,實(shí)例變量,因?yàn)閷?shí)例對(duì)象包含實(shí)例變量送爸,所以實(shí)例變量也等同于存在堆中铛嘱。如果對(duì)對(duì)象在堆中如何分布感興趣請(qǐng)看這篇
2.3 什么是實(shí)例對(duì)象?
實(shí)例對(duì)象是系統(tǒng)中用來(lái)描述客觀事物的一個(gè)實(shí)體袭厂,它是構(gòu)成系統(tǒng)的一個(gè)基本單位墨吓。一個(gè)對(duì)象由一組屬性和對(duì)這組屬性進(jìn)行操作的一組服務(wù)組成。從更抽象的角度來(lái)說(shuō)纹磺,對(duì)象是問(wèn)題域或?qū)崿F(xiàn)域中某些事物的一個(gè)抽象帖烘,它反映該事物在系統(tǒng)中需要保存的信息和發(fā)揮的作用;通俗的來(lái)講橄杨,對(duì)象就是使用程序?qū)ΜF(xiàn)實(shí)存在的事物一種抽象的描述秘症。例如:現(xiàn)實(shí)中有一條叫小花的狗,程序中的描述就是使用一個(gè)變量來(lái)引用這個(gè)被實(shí)例化出來(lái)的對(duì)象式矫,這個(gè)對(duì)象的名字叫小花乡摹,年齡5歲,這就是小花這個(gè)對(duì)象的屬性也叫實(shí)例變量衷佃。這個(gè)小花還有有跑趟卸,跳,吃氏义,睡等行為锄列,這就叫做對(duì)象的方法。