原创 Java 垃圾收集之垃圾收集器介紹

文章目錄垃圾收集器並行與併發Serial 收集器ParNew 收集器Parallel Scavenge 收集器Serial Old 收集器Parallel Old 收集器CMS 收集器G1 收集器GC 日誌說明垃圾收集器參數總結

原创 Java 垃圾收集之判斷對象是否存活

文章目錄判斷對象是否存活引用計數法可達性分析算法Java 中的引用對象何時死亡回收方法區 判斷對象是否存活 垃圾收集器工作前需要判斷對象是否存活,那麼垃圾收集器是如何判斷的?判斷標準又是什麼?前面講了 Java 內存區域各個部分,

原创 裝飾器模式(三)

裝飾器模式:動態的給一個對象添加一些額外的職責,就增加新功能來說,裝飾模式比生成子類更加靈活。 簡單來說,裝飾器模式就是在不改動原有類的基礎上,爲擴展原有類功能。 下面是裝飾器模式的基本實現: 原有的類: /** * 原始的抽象類

原创 工廠方法模式(五)

工廠方法模式:定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。 之前寫過一篇簡單工廠模式,其中有一個計算器的例子,那麼工廠方法模式和簡單工廠模式有什麼區別呢? 簡單工廠VS工廠方法: 在簡單工廠

原创 原型模式(六)

原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 原型模式其實就是從一個對象再創建另外一個可定製的對象,而且不需要知道任何的創建細節。 原型模式需要一個原型類,在Java中的Object類中有clone()方法,

原创 抽象工廠模式(十一)

由一個例子引出抽象工廠模式: 在實際開發中,我們有時會遇到切換數據庫的需求,由於數據庫之間的差異,不同數據庫對數據表的增刪改查操作也有差異。爲了解決這個問題,我們很容易想到用工廠模式來實現: User類: public class Us

原创 @PostConstruct註解作用

從Java EE5規範開始,Servlet中增加了兩個影響Servlet生命週期的註解,@PostConstruct和@PreDestroy,這兩個註解被用來修飾一個非靜態的void()方法,並且被修飾的方法不能拋出異常。 寫法有如下兩種

原创 代理模式(四)

代理模式:爲其他對象提供一種代理以控制對這個對象的訪問。 使用代理模式可以間接的訪問對象,代理對象和被代理對象需要實現相同的接口或者繼承相同的類,這樣才能達到代理的效果。 代碼演示: Subject類: 代理對象和被代理對象相同的父類,定

原创 觀察者模式(十)

觀察者模式 又叫做發佈-訂閱(Publish/Subscribe)模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使他們能夠自動更新自己。 觀察者模式

原创 類加載器與雙親委派模型

文章目錄類加載器類與類加載器雙親委派模型破壞雙親委派模型 類加載器 虛擬機設計團隊把類加載階段中的 “通過一個類的全限定名來獲取描述此類的二進制字節流” 這個動作放到 Java 虛擬機外部去實現,以便讓應用程序自己決定如何去獲取所

原创 高效併發之鎖優化

文章目錄鎖優化自旋鎖與自適應自旋鎖消除鎖粗化輕量級鎖偏向鎖 鎖優化 HotSpot 虛擬機實現了各種鎖優化技術,如適應性自旋(Adaptive Spinning)、鎖消除(Lock Elimination)、鎖粗化(Lock Co

原创 高效併發之線程安全

文章目錄線程安全Java 語言中的線程安全線程安全的實現方法 線程安全 當多個線程訪問一個對象時,如果不用考慮這些線程在運行時環境下的調度和交替執行,也不需要進行額外的同步,或者在調用方進行任何其它的協調工作,調用這個對象的行爲都

原创 高效併發之 Java 內存模型

文章目錄Java 內存模型硬件的效率與一致性Java 內存模型主內存與工作內存內存間交互操作對於 volatile 型變量的特殊規則原子性、可見性與有序性先行發生原則 Java 內存模型 物理計算機中的併發問題與虛擬機中的情況有不

原创 高效併發之 Java 與線程

文章目錄Java 與線程線程的實現Java 線程調度狀態轉換 Java 與線程 線程的實現 實現線程主要有3種方式:使用內核線程實現、使用用戶線程實現和使用用戶線程加輕量級進程混合實現。 使用內核線程實現 內核線程(Kernel

原创 Java 程序編譯與代碼優化之運行期優化

文章目錄程序編譯與代碼優化運行期優化HotSpot 虛擬機內的即時編譯器解釋器與編譯器編譯對象與觸發條件方法調用計數器回邊計數器 程序編譯與代碼優化 Java 對於程序的優化包含了編譯期優化與運行期優化,其中編譯器優化主要是提高了