Java儲存區詳解

Java中把存儲區分爲6類。分別爲寄存器(register)、棧(stack)、堆(heap)、靜態存儲區(static storage)、常量存儲區(constant storage)以及非隨機存取存儲區(Non-RAM)。

 1. 寄存器(register).寄存器與其他的存儲區不同,它位於CPU中,所以它是存取速度最快的存儲區.但是由於CPU中寄存器的數量是非常有限的,所以寄存器的使用是由CPU按需進行分配.編程的時候我們沒有必要去對它進行直接控制.並且在程序中也沒辦法找到到底什麼時候使用了寄存器的依據.

 2. 棧(stack).它位於隨機存取存儲器(RAM)中,並通過由CPU直接支持的棧指針(stack pointer)來進行操作.棧指針通過向下移動來分配新的存儲空間,並通過向上移動來釋放存儲空間.這是僅次於寄存器的另一種高速有效地分配存儲空間的 方式.在創建程序期間,Java編譯器必須知道存儲在棧上的所有數據的準確大小和它們的生命週期.這樣它才能夠產生代碼來讓棧指針上下地移動.但這種約束 限制了代碼的靈活性,所以當某些Java存儲區在棧上的時候——特別是,對象引用(object reference)――而Java對象本身並不被存儲在棧上.

 3. 堆(heap).這是存儲Java所有對象的內存池(同樣在RAM區域中).堆的優點是,它不像棧一樣,編譯器並不需 要知道它應該從堆中分配多大的存儲空間,或者存儲空間應該在堆上存在多久.因此,在堆上分配多大的存儲空間具有很大的靈活性.無論你何時需要創建對象,你 只需要簡單的在代碼中使用關鍵字new來創建它就行了.在這段代碼被執行時候就在堆(heap)上面分配相應的存儲空間.當然,爲這樣的靈活性也需要付出 一定的代價:在堆上分配存儲空間比在棧上分配存儲空間要更加耗時(如果你能夠在Java中像在C++一樣,在stack上創建對象的話).

4. 靜態存儲區(static storage).”靜態(static)”在這裏表示”在一個固定的位置”(儘管它同樣在RAM中).靜態存儲區包括:對於程序的整個運行期間都有效的數據.你能夠使用關鍵字static來指定特殊的對象爲靜態的.但是Java對象自身卻從來不放置在靜態存儲區中.

 5. 常量存儲區(constant storage).常量通常被直接放置在程序代碼當中.這是安全的,因爲它們永遠不能被改變.在某些時候多個常量能夠自己分隔開,這樣在嵌入式系統中可以被任意地放置在只讀存儲器(ROM)中.

 6. 非RAM存儲區(non-RAM storage).如果數據完全存在於程序之外,在程序未被運行時數據也能存在,而不受程序的控制.對於此類情況,有兩個主要的例子來說明:一,對象流(streamed objects),這種對象通常以字節流的形式被送到其他的機器去.二,持久化對象(persistent objects),這種對象存放在磁盤上,即便是程序中止以後它們仍然保持原有狀態.這些存儲器都是將對象以某種形式保存在其他的介質中,然後在需要的時候再把它恢復爲常規的基於RAM的對象.Java提供了對輕量級持久性的支持.在未來的Java版本中,Java將提供更加完備的持久性的支持

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章