從頭認識Java之(Thinking in Java隨記系列)Ⅱ

最近公司事情比較多,所以看書的時間少了些……哈,全是藉口,就是自己犯懶,懶癌慢慢治吧。今天開始第二章的學習啦。感覺自己還是缺少一些動力,哎,工資,爲了漲工資,努力吧,騷年。

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

第三十一頁,System類介紹:

第四十頁,“別名現象”:

第四十二頁,算數操作符針對int類型:

算數操作符針對float類型:

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