Java程序的內(nèi)部存儲

??此前對數(shù)據(jù)在內(nèi)存中的存儲一直不是很清楚,最近通過查閱資料終于對此有些了解,在java中有五大不同的地方可以存儲數(shù)據(jù):寄存器、堆棧、堆、常量存儲、非RAM存儲。

1.寄存器

??這是最快的儲存區(qū),因為它位于處理器的內(nèi)部,但是寄存器的數(shù)量有限,要根據(jù)需求進行分配,不能直接控制。不能在程序中感覺到寄存器的任何跡象。

2.堆棧

??位于通用RAM(隨機訪問存儲器)中。但通過堆棧指針可以從處理器哪里獲取直接支持。堆棧指針若向下移動,則分配新的內(nèi)存,若向上移動,則釋放那些內(nèi)存。這是一種快速有效的分配存儲方法,僅次于寄存器。創(chuàng)建程序時,java系統(tǒng)必須知道存儲在堆棧內(nèi)所有項的確切生命周期,以便于上下移動堆棧指針。這約束了程序的靈活性,所以雖然某些java數(shù)據(jù)存儲于堆棧中,特別是對象引用,但是java對象并不存儲于其中。

3.堆

??一種通用的內(nèi)存池,也位于RAM區(qū),用于存放java對象。堆不同堆棧的好處是:編譯器不需要知道存儲的數(shù)據(jù)在對堆里面存活多長時間。因此,在堆里面分配存儲有很大的靈活性,但是也因為有更大的靈活性,所以用堆進行存儲分配和清理要比用堆棧需要更長的時間。

4.常量存儲

??常量值通常存放于程序代碼內(nèi)部,這樣做是安全的,因為他們永遠(yuǎn)不會被改變。有時,在嵌入式系統(tǒng)中,常量本身會和其它部分隔離開,所以在這種在這種情況下,可以選擇將其存放在ROM只讀存儲器中。

5.非RAM存儲

??如果數(shù)據(jù)完全存活于程序之外,那么它可以不受程序的任何控制,在程序沒有運行時也可以存在。其中兩個基本的例子是流對象和持久化對象。在流對象中,對象轉(zhuǎn)化成字節(jié)流,通常被發(fā)送給另一臺機器。在“持久化對象”中,對象被存放在磁盤上,因此即使程序終止,他們?nèi)钥梢员3肿约旱臓顟B(tài)。這種存儲方式的技巧在于:把對象轉(zhuǎn)化成可以存放到其它媒介上的失誤,在需要時,可恢復(fù)成常規(guī)的,給予RAM對象。Java提供了對輕量級持久化的支持,而諸如JDBC和Hibernanate這樣的機制提供了更加復(fù)雜的對在數(shù)據(jù)庫中存儲和讀取對象信息的支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容