程序運行時6個不同地方可以存儲數(shù)據(jù):
1、寄存器(register):這是最快的存儲區(qū)——處理器內(nèi)部。但是寄存器數(shù)量及其有限,所以寄存器由編譯器根據(jù)需求進(jìn)行分配,你不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象。
2、堆棧(stack):位于通用的RAM中,但通過它的“堆棧指針”可以從處理器哪里獲得直接支持。堆棧指針若向下移動,則分配新的內(nèi)存;若向上移動,則釋放那些內(nèi)存。這是一種快速有效的分配存儲方法,僅次于寄存器。創(chuàng)建程序時,Java編譯器必須知道存儲在堆棧內(nèi)所有數(shù)據(jù)的確切大小和生命周期。因為它必須生產(chǎn)相應(yīng)的代碼,以便上下移動堆棧指針。這一約束限制了程序的靈活性,所以雖然某些Java數(shù)據(jù)存儲于堆棧中——特別是對象引用,但是Java對象并不存儲于其中。
3、堆(heap):一種通用性的內(nèi)存池(也在RAM區(qū)),用于存放所有的Java對象。堆不同于堆棧的好處是:編譯器不需要知道要從堆里分配多少存儲區(qū)域,也不必知道存儲的數(shù)據(jù)在堆里存活多長時間。因此,在隊里分配存儲有很大的靈活性。當(dāng)需要創(chuàng)建一個對象時,只需要new下。執(zhí)行這行代碼時,會自動在堆里進(jìn)行存儲分配。當(dāng)然,為這種靈活性必須付出相應(yīng)的代價。用堆進(jìn)行存儲分配比用堆棧進(jìn)行存儲需要更多的時間。
4、靜態(tài)存儲(static storage):這里的“靜態(tài)”是指“在固定的位置”(雖然也在RAM)。靜態(tài)存儲里存放程序運行時一直存在的數(shù)據(jù)。可以用關(guān)鍵字static來標(biāo)識一個對象的特定元素是靜態(tài)的,但Java對象本身從來不會存放在靜態(tài)存儲空間里。
5、常量存儲(constant storage):常量值通常直接存放在程序代碼內(nèi)部,這樣做是安全的,因為他們永遠(yuǎn)不會被改變。有時,在嵌入式系統(tǒng)中,常量本身會和其它部分隔離開,所以在這種情況下,可以選擇將其存放在ROM中。
6、非RAM存儲(non-RAM storage):如果數(shù)據(jù)完全存活于程序外,那么它可以不受程序的任何控制,在程序沒有運行時也可以存在。其中兩個最基本的例子就是“流對象”(stream object)和“持久化對象”(persistent object)。
posted on 2008-07-03 15:01
scea2009 閱讀(175)
評論(0) 編輯 收藏