一切都是對象之必須由你創建所有對象(一)存儲到什麼地方

必須由你創建所有對象
  一旦創建了一個引用,就希望它能與一個新的對象想關聯。通常用new操作符來實現這一目的。new關鍵字的意思“給我一個新對象”。所以前面的例子可以寫成:

		string s = new String("asdf");

       它不僅表示“給我一個新的字符串”,而且通過提供一個初始字符串,給出了怎樣產生這個String的信息。
  當然,除了String類型,Java提供了大量過剩的現成類型。重要的是,你可以自行創建類型。事實上,這是Java程序設計中一項基本行爲。
存儲到什麼地方
  程序運行時,對象怎麼進行放置安排的呢?特別是內存是怎樣分配的呢?對這些方面的瞭解會對你有很大幫助。有五個不同的地方可以存儲數據:
  1)寄存器。這是最快的存儲區,因爲它位於不同於其他存儲區的地方——處理器內部。但是寄存器的數量極其有限,所以寄存器根據需求進行分配。你不能直接控制,也不能在程序中感覺到寄存器存在的任何跡象(另一方面,C和C++允許你向編譯器建議寄存器的分配方式)。
  2)堆棧。位於通用RAM(隨機訪問存儲器)中,但通過堆棧指針可以從處理器那裏獲得直接支持。堆棧指針若向下移動,則分配新的內存;若向上移動,則釋放那些內存。這是一種快速有效的分配存儲方法,僅次於寄存器。創建程序時,Java系統必須知道存儲在堆棧內所有項的確切生命週期,以便上下移動堆棧指針。這一約束限制了程序的靈活性,所以雖然某些Java數據存儲於堆棧中——特別是對象引用,但是Java對象並不存儲於其中。
  3)。一種通用的內存地(也位於RAM區),用於存放所有的Java對象。堆不同於堆棧的好處是:編譯器不需要知道存儲的數據在堆裏存活多長時間。因此,在堆裏分配存儲有很大的靈活性。當需要一個對象時,只需用new寫一行簡單的代碼,當執行這行代碼時,會自動在堆裏進行存儲分配。當然,爲這種靈活性必須要付出相應的代價:用堆進行存儲分配和清理可能比用堆棧進行存儲分配需要更多的時間(如果確實可以在Java中像在C++中一樣在棧中創建對象)。
  4)常量存儲。常量值通常直接存放在程序代碼內部,這樣做是安全的,因爲它們永遠不會被改變。有時,在嵌入式系統中,常量本身會和其他部分隔離開,所有在這種情況下,可以選擇將其存放在ROM(只讀存儲器)中。
  5)非RAM存儲。如果數據完全存活於程序之外,那麼它可以不受程序的任何控制,在程序沒有運行時也可以存在。其中兩個基本的例子是流對象和持久化對象。在流對象中,對象轉化成字節流,通常被髮送給另一臺機器。在“持久化對象”中,對象被存放於磁盤上,因此,即使程序終止,它們仍可以保持自己的狀態。這種存儲方式的技巧在於:把對象轉化成可以存放在其他媒介上的事物,在需要時,可恢復成常規的、基於RAM的對象。Java提供了對輕量級持久化的支持,而諸如JDBC和Hibernate這樣的機制提供了更加複雜的堆在數據庫中存儲和讀取對象信息的支持。

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