Java中数据是如何存储
2019獨角獸企業重金招聘Python工程師標準>>>
一:JAVA中數據的存儲方式
①:寄存器:這是最快的存儲區,因為它位于不同于其他存儲區的地方———處理器內部。但是寄存器的數量極其有限,所以寄存器根據需求進行分配。你不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象。
②:棧:位于RAM(內存)中 ,但通過指針可以從處理器哪里獲得直接支持,棧的指針上移,釋放內存。下移重新分配內存。這是一個快速有效的分配方法,僅次于寄存器。創建程序時,Java系統必須知道存儲在棧內所有項的確切生命周期。以便于上下移動棧的指針。這一約束限制了程序的靈活性,所以雖然某些Java數據存儲于棧中——特別是對象的引用,但是Java對象并不存在于棧中。
③:堆:一種通用的內存池(也位于RAM區),用于存放所有的Java對象。堆不同于棧的好處是:編譯器不需要知道存儲的數據在堆里面活多長的時間。因此,在堆里分配存儲有很大的靈活性,當需要一個對象時,只需要new一個對象,當執行這個代碼時,會自動在堆里面進行存儲分配。當然,任何事情都有兩面性,用堆進行存儲分配和清理可能比用棧存儲分配需要更多的時間。
④:常量存儲:常量值通常直接存放在程序的內部,這樣做是安全的,因為他們永遠不會被改變,有時,嵌入到系統中,常量本身會和其他部分隔離開,所以在這種情況下,可以選擇存在ROM(只讀存儲器)中。
⑤非RAM存儲:如果數據完全存活在程序之外,那么他可以不受程序的任何控制,在程序沒有運行時也可以存在。其中兩個基本的例子是流對象和持久化對象。在流對象中,對象轉化成字節流,通常被發送到另外一臺機器上。在持久化對象中,對方被放在磁盤上,因此,即使程序終止,他們仍可以保持自己的狀態。這種存儲方式在于:把對象轉化成可以存放早其他媒介上的事物,在需要時,可恢復成常規的,基于RAM對象。Java提供了對輕量級持久化的支持。
?
1.存儲數據類型:棧內存中存放局部變量(基本數據類型和對象引用),而堆內存用于存放對象(實體)。
2.存儲速度:就存儲速度而言,棧內存的存儲分配與清理速度更快于堆,并且棧內存的存儲速度僅次于直接位于處理器當中的寄存器。
3.靈活性:就靈活性而言,由于棧內存與堆內存存儲機制的不同,堆內存靈活性更優于棧內存。
這樣兩種存儲方式的不同之處,也是由于它們自身的存儲機制所造成的。所以為了理解它們,首先我們應該弄清楚它們分別的存儲原理和機制,在Java中:
— 棧內存被要求存放在其中的數據的大小、生命周期必須是已經確定的;
— 堆內存可以被虛擬機動態的分配內存大小,無需事先告訴編譯器的數據的大小、生命周期等相關信息。
轉載于:https://my.oschina.net/mujourney/blog/681264
總結
以上是生活随笔為你收集整理的Java中数据是如何存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ffmpeg speex转换为mp3或者
- 下一篇: 详解:从Greenplum、Hadoop