Java 對象在內存中的存儲

Java中  強調:  一切都是對象 

儘管如此  但是操縱的標識符實際上是對象的一個引用   借用THINKING IN JAVA 書中的例子 :

對象作爲電視機   引用就作爲遙控器    只要握有這個遙控器  就可以保持與電視機的聯繫   當想改變頻道時   實際上操縱的是遙控器,

再由遙控器來調控電視機(對象)

此外 ,引用也可以獨立存在,如: String sl;  這裏只是創建了引用  並不是對象

如何將引用和一個新的對象關聯呢  用 new 關鍵字  

比如:  String s  = new  String("asdf");


還有一個重要的概念 ,Java 中所有的對象都要通過對象引用訪問   也就是每個對象得存在一個引用


那麼,對象 或 引用 存儲在什麼地方了呢 ?

首先,有五個不同的地方可以存儲數據;

1)寄存器:它直接位於處理器內部   Java中不能直接控制寄存器  

2)堆棧   :位於通用RAM(隨機存儲器)中,通過堆棧指針可以從處理器獲得直接支持,堆棧指針向下移動,則分配新的內存,若向上移動,則釋放內存,這樣做十分高效。

但是創建程序時,Java系統必須知道堆棧中所有項的確切生命週期,這一約束限制了程序的靈活性。 基本類型對象引用就存在其中,但Java對象除外。

3)堆      :一種通用的內存池(也位於RAM),  用於存放所有的Java對象   。缺點就是爲了靈活性而增加了時間.

4)常量存儲: 通常直接存在程序代碼內部,這樣做是安全的 ,因爲它們永遠不會被改變。

5)非RAM存儲:兩個基本的例子就是 流對象持久化對象。流對象中,對象被轉化爲字節流; 持久化對象中,對象被存在與磁盤上,如數據庫。


所以說對象引用是指向對象存儲所在堆中的某個區域的指針




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