《Thinking in Java 》學習筆記 --- Java內存分配,對象存放到什麼地方?怎麼放?

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)。通俗的將就是在程序沒有運行的時候也存在的數據。通常以“流對象(序列化)”和 “持久化對象(這個現在貌似不常用了)” 存放在硬盤上。

 

關於進一步的學習,可以查閱相關《計算機組成原理》一書相似的內容。

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