原创 Java 程序編譯與代碼優化之編譯優化技術

文章目錄編譯優化技術公共子表達式消除數組邊界檢查消除方法內聯逃逸分析 編譯優化技術 以一段代碼來說明編譯器是怎麼優化代碼的: 優化前的原始代碼: static class B { int value; final int ge

原创 Java 垃圾收集之垃圾收集算法及 HotSpot 算法實現

文章目錄垃圾收集算法標記 - 清除算法複製算法標記 - 整理算法分代收集算法HotSpot 的算法實現枚舉根節點安全點安全區域 垃圾收集算法 上一篇博我們探討了垃圾收集時如何判斷對象是否存活,這篇探討一下垃圾收集器是怎麼回收內存的

原创 Java 垃圾收集之內存分配與回收策略

文章目錄內存分配與回收策略對象優先在 Eden 分配大對象直接進入老年代長期存活的對象將進入老年代動態對象年齡判定空間分配擔保 內存分配與回收策略 Java 體系中所提倡的自動內存管理最終可以歸結爲自動化地解決了兩個問題:給對象分

原创 Java對象創建及訪問過程

HotSpot 虛擬機對象創建過程 1. 對象的創建 虛擬機創建對象和運行時數據區密切相關,在Java程序運行過程中無時無刻都有對象被創建出來。在語言層面上,創建對象通常僅僅是一個 new 關鍵字而已,那麼在虛擬機中對象的創建過程

原创 Java內存區域及其生命週期

運行時數據區域 Java 虛擬機在執行 Java 程序的過程中會把它所管理的內存分爲若干不同的數據區域,包括以下幾個數據區域: 1. 程序計數器 程序計數器是一塊較小的內存空間,它可以看作是當前線程所執行的字節碼的行號指示器,字

原创 OutOfMemoryError 異常產生原因及其解決方案

OutOfMemoryError 異常 在 Java 虛擬機規範的描述中,除了程序計數器外,虛擬機內存的其它幾個運行時區域都有發生 OutOfMemoryError 異常的可能。 Java 堆溢出 Java 堆用於存儲對象實例,只

原创 職責鏈模式(十八)

職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這個對象連成一條鏈,並沿着這條鏈處理請求,直到有一個對象處理它爲止。 這裏發出這個請求的客戶端並不知道這當中的哪一個對象最終處理這個請求,這樣系統的更改

原创 中介者模式(十九)

在系統設計中,儘管將一個系統分割成許多對象通常可以增加其可複用性,但是對象之間相互連接的激增又會降低其可複用性了。因爲大量的連接使得一個對象不可能在沒有其他對象的支持下工作,系統表現爲一個不可分割的整體,所以,對系統的行爲進行任何較大的改

原创 享元模式(二十)

享元模式:運用共享技術有效地支持大量細粒度的對象。 比如做一個網頁,但是會有不同的用途,有時是展示產品,有時展示博客。實際開發中,如果每次都創建一個新的對象,開銷很大,所以我們用一個集合將對象存起來,後面有用到相同對象的直接從集合中取出,

原创 單例模式(十六)

單例模式:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止你實例化多個對象。一個最好的辦法就是,讓類自身負責保存它的唯一實例。這個類可以保證沒有其它的實例可以創建,並且它可

原创 命令模式(十七)

命令模式:將一個請求封裝爲一個對象,從而使得你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可撤銷的操作。 比如我們去吃燒烤的時候,可以把每次點單當作一個請求,我們向服務員點單,然後服務員再通知廚師,下面用代碼實現這一

原创 組合模式(十五)

組合模式:將對象組合成樹形結構表示“部分-整體”的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有統一性。 例子:一套辦公系統,總公司的人力資源部以及財務部在分公司也要用,這其實就是整體和部分可以被一致對待的問題,這時可以用組合模

原创 備忘錄模式(十四)

備忘錄模式:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就可以將該對象恢復到原先的狀態。 舉個栗子:打遊戲時候需要存檔,BOSS打不過之後可以恢復之前的數據繼續玩。 遊戲角色GameRole pu

原创 適配器模式(十三)

適配器模式:將一個類的接口轉化爲客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。 舉個栗子:姚明最初在NBA聽不懂英文,這時就需要一個翻譯,這個翻譯就是姚明的適配器。 在軟件開發中,系統

原创 狀態模式(十二)

一個例子引出狀態模式: 每天的不同時間工作會有不同的工作狀態,我們用面向對象來實現一下: 工作類: public class Work { /** * 時間點 */ private int hour;