??此前對數據在內存中的存儲一直不是很清楚,最近通過查閱資料終于對此有些了解,在java中有五大不同的地方可以存儲數據:寄存器、堆棧、堆、常量存儲、非RAM存儲。
1.寄存器
??這是最快的儲存區,因為它位于處理器的內部,但是寄存器的數量有限,要根據需求進行分配,不能直接控制。不能在程序中感覺到寄存器的任何跡象。
2.堆棧
??位于通用RAM(隨機訪問存儲器)中。但通過堆棧指針可以從處理器哪里獲取直接支持。堆棧指針若向下移動,則分配新的內存,若向上移動,則釋放那些內存。這是一種快速有效的分配存儲方法,僅次于寄存器。創建程序時,java系統必須知道存儲在堆棧內所有項的確切生命周期,以便于上下移動堆棧指針。這約束了程序的靈活性,所以雖然某些java數據存儲于堆棧中,特別是對象引用,但是java對象并不存儲于其中。
3.堆
??一種通用的內存池,也位于RAM區,用于存放java對象。堆不同堆棧的好處是:編譯器不需要知道存儲的數據在對堆里面存活多長時間。因此,在堆里面分配存儲有很大的靈活性,但是也因為有更大的靈活性,所以用堆進行存儲分配和清理要比用堆棧需要更長的時間。
4.常量存儲
??常量值通常存放于程序代碼內部,這樣做是安全的,因為他們永遠不會被改變。有時,在嵌入式系統中,常量本身會和其它部分隔離開,所以在這種在這種情況下,可以選擇將其存放在ROM只讀存儲器中。
5.非RAM存儲
??如果數據完全存活于程序之外,那么它可以不受程序的任何控制,在程序沒有運行時也可以存在。其中兩個基本的例子是流對象和持久化對象。在流對象中,對象轉化成字節流,通常被發送給另一臺機器。在“持久化對象”中,對象被存放在磁盤上,因此即使程序終止,他們仍可以保持自己的狀態。這種存儲方式的技巧在于:把對象轉化成可以存放到其它媒介上的失誤,在需要時,可恢復成常規的,給予RAM對象。Java提供了對輕量級持久化的支持,而諸如JDBC和Hibernanate這樣的機制提供了更加復雜的對在數據庫中存儲和讀取對象信息的支持。