1. 程式人生 > >Java內存分配機制

Java內存分配機制

需求 通過 long 存儲 c++ 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 進行大量數據的持久化。

?

Java內存分配機制