Java:物件導論(2) 物件的儲存地址
上一節提到,用引用操作物件,引用的是物件的地址。那麼物件的“真身”放置在什麼地方呢? 在java程式執行時,有五個不同的地方可以儲存資料。 **1)暫存器。**這是最快的儲存區,因為他不同於其他的儲存,它位於處理器內部。但是暫存器的數量及其有限,所以需要根據需求進行分配,使用者不能直接控制。 **2)堆疊。**位於通用RAM(隨機訪問儲存器)中,但是通過堆疊指標可以從處理器那裡獲得直接支援。堆疊指標若向下移動,則分配新的記憶體;若向上移動,則釋放那些記憶體。它的儲存速度僅次於暫存器。 **3)堆。**一種通用的記憶體池(也位於RAM區),用於存放所有的Java物件。堆不同於堆疊的是:編譯器不需要知道儲存的資料在隊裡存活多長時間。因此,在堆裡分配儲存有很大的靈活性。當需要一個物件時,只需要new寫一行程式碼,當執行程式碼時,會自動的儲存到堆裡。當然,堆也會為這樣的靈活性付出相應的代價:用對進行儲存分配和清理可能比用堆疊進行儲存分配需要更多的時間。 **4)常量儲存。**常量值通常直接存放在程式程式碼內部,這樣做是安全的,因為它們永遠不會改變。有時,在嵌入式系統中,常量本身會和其他部分分隔開,所以在這種情況下,可以選擇將其儲存在ROM(只讀儲存器)中。 **5)非RAM儲存。**如果資料完全存活於程式之外,那麼它可以不受程式的任何控制,在程式沒有執行時也可以存在。其中兩個基本的例子就是流物件和持久化物件。在流物件中,物件轉化為位元組流,通常被髮送給另一個機器。在“持久化物件”中,物件被存放在磁碟上,因此,即使程式終止,它們仍可以保持自己的狀態。這種儲存方式技巧在於:把物件轉化為可以存在其他媒介上的事物,在需要時,可恢復成常規的。基於RAM的物件。例如,可以將一些物件的資料寫入到檔案裡,用的時候再讀出資料,新建物件。