有6個地方可以存儲數據:
1.寄存器(register)。最快的存儲區域,存在於CPU當中。數量有限由編譯器統一進行分配,不能直接控制,對於Java程序員來說,寄存器是“透明”的。
2.堆棧(stack)。其存取速度僅次於寄存器(register)。位於RAM(random-access memory)當中,若“堆棧指針”下移則分配更多內存,若“堆棧指針”上移則釋放這些內存。Java編譯器必須知道存儲在堆棧中的數據的確切大小和聲明週期(因爲他必須生成相應代碼,用以移動“堆棧指針”)。以上約束限制了程序的靈活性,“對象引用”存放在堆棧,但對象本身不存儲在其中。
3.堆(heap)。其存取速度相對於堆棧(stack)要慢(特別是分配資源),位於RAM(random-access memory)。堆(heap)的好處在於:Java編譯器不需要知道其中數據的確切大小以及生命週期,這使程序有很大的靈活性。在Java程序中 “new”關鍵字將會在堆(heap)中創建出一個對象。
個人理解:
Shap s = new Circle();//這裏s代表“對象引用”位於堆棧(stack),而它所代表的對象本身 存在於堆(heap)當中。
4.靜態存儲(static storage)。這個不太懂。原話大概是:這裏“靜態”是指在“固定的位置”(儘管也在RAM中),靜態存儲中存放程序運行時一直存在的數據。可以用static來表示一個對象是靜態的,但是Java對象本身不會存放在靜態存儲空間中。
5.常量存儲(constant storage)。通常放在程序代碼內部,或者存放在ROM(read-only memory)中。
6.非RAM存儲(no-RAM storage)。通俗的將就是在程序沒有運行的時候也存在的數據。通常以“流對象(序列化)”和 “持久化對象(這個現在貌似不常用了)” 存放在硬盤上。
關於進一步的學習,可以查閱相關《計算機組成原理》一書相似的內容。