Java 程序運(yùn)行時的內(nèi)存分配策略有三種,分別是靜態(tài)分配,棧式分配,和堆式分配府树,對應(yīng)的,三種存儲策略使用的內(nèi)存空間主要分別是靜態(tài)存儲區(qū)(也稱方法區(qū))伸眶、棧區(qū)和堆區(qū)杨凑。
靜態(tài)存儲區(qū)(方法區(qū)):主要存放靜態(tài)數(shù)據(jù)、全局 static 數(shù)據(jù)和常量晴楔。這塊內(nèi)存在程序編譯時就已經(jīng)分配好顿苇,并且在程序整個運(yùn)行期間都存在。
棧區(qū) :當(dāng)方法被執(zhí)行時滥崩,方法體內(nèi)的局部變量(其中包括基礎(chǔ)數(shù)據(jù)類型岖圈、對象的引用)都在棧上創(chuàng)建,并在方法執(zhí)行結(jié)束時這些局部變量所持有的內(nèi)存將會自動被釋放钙皮。因?yàn)闂?nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中蜂科,效率很高,但是分配的內(nèi)存容量有限短条。
堆區(qū) : 又稱動態(tài)內(nèi)存分配导匣,通常就是指在程序運(yùn)行時直接 new 出來的內(nèi)存,也就是對象的實(shí)例茸时。這部分內(nèi)存在不使用時將會由 Java 垃圾回收器來負(fù)責(zé)回收贡定。
結(jié)論:
局部變量的基本數(shù)據(jù)類型和引用存儲于棧中,引用的對象實(shí)體存儲于堆中可都』捍—— 因?yàn)樗鼈儗儆诜椒ㄖ械淖兞浚芷陔S方法而結(jié)束渠牲。
成員變量全部存儲與堆中(包括基本數(shù)據(jù)類型旋炒,引用和引用的對象實(shí)體)—— 因?yàn)樗鼈儗儆陬悾悓ο蠼K究是要被new出來使用的签杈。