1. 程式人生 > >Java記憶體分配機制

Java記憶體分配機制


Java存放物件、變數等資訊需要分配記憶體進行儲存,分配及儲存區原理如下:

1.暫存器

它是唯一位域處理器內部的儲存區。所以它是最快的,數量也是極其有限的,並且和 C,C++不一樣的是,Java暫存器是根據程式需求進行分配的,你不能控制、也不能向它“建議“分配方式。在 java 中暫存器對於程式設計師來說是感受不到其存在的。

2.棧

位於隨機訪問儲存器(RAM)中,但通過堆疊指標可以從處理器獲得直接支援。它的執行速度僅次於暫存器。儲存在它內部的項的生命週期對與棧來說必須是透明的,並根據其生命週期堆疊指標進行上下移動(向下分配記憶體,向上釋放記憶體)。所以其靈活性不高,適合儲存一些基本型別(如:boolean、byte、char、short、float、int、long、double)。它的宣告方式

int i = 0;

1

2

的意思是:不是用 new 來建立變數,二是建立一個並非是引用的“自動”變數。這個變數直接儲存“值”,並置於堆疊中。

3.堆

位於隨機訪問儲存器(RAM)中,用於存放所有的 Java 物件(通過 new 關鍵字產生的都是物件,new 關鍵字的意思是“給我一個物件”=號左邊為物件的一個引用)。它不需要知道儲存的資料在堆中的生命週期,因而更加靈活。如果可以在棧中儲存物件的話,堆進行儲存分配和清理要比用棧花費更多的時間。

4.常量儲存

由於常量永遠不會改變,所以它通常存放在程式程式碼內部。在嵌入式系統中,常量本身會和其他部分隔離開,所以在這種情況下可以選擇將常量放在只讀儲存器(ROM)中。

5.非RAM儲存

通過將物件轉化成可以存放在其他媒介(硬碟)上的事務,在需要時,它們可恢復成常規的、基於RAM的物件。

如流物件和持久化物件。在 流物件 中,物件轉換為位元組流被髮送給另一臺機器。在 持久化物件 中,物件被存放於磁碟上。因此,即使程式終止,它們依然可以保持自己的狀態。

Java 本身提供了輕量級的持久化支援,但是可以通過 JDBC 及 Hibernate 進行大量資料的持久化。