原创 1 IOC容器設計與實現

在Spring IOC容器的設計中,可以看到兩個主要的容器系列,一個是實現BeanFactory接口的簡單容器系列,這系列容器只實現了容器的最基本功能;另一個是ApplicationContext應用上下文,它作爲容器的高級形態而存在。應

原创 JVM垃圾收集(三)垃圾收集器

先來看看目前主流的垃圾收集器和他們的關係 介紹兩個術語的區別 並行:多個垃圾收集線程並行工作,但此時用戶線程仍處於工作狀態 併發:用戶線程與垃圾收集器線程同時執行(可能交替執行),用於線程仍在工作,垃圾收集程序運行於另一個CPU上。

原创 JVM 運行時數據區

JVM在執行Jva程序時候會把它所管理的內存劃分爲若干個不同的數據區域。這些區域有各自的用途,以及創建和銷燬的時間。下圖表示運行時數據區的基本劃分,圖片來自其他微博。 1 程序計數器 程序計數器是一塊比較小的內存空間,它可以看作是當前線

原创 F 序列化

Java 對象只有在虛擬機運行的情況下才存在,而虛擬機關閉了以後,這個對象也隨着內存回收被釋放掉,這種狀態稱爲“瞬態”。如何把這種瞬態轉換爲持久態就是序列化要解決的問題。除了持久化需要用到序列化以外,把一個對象在網絡上進行傳輸也是序列化的

原创 Spring 循環引用 ——理解singleton與prototype初始化的區別

所謂的循環引用,就是A依賴B,B又依賴A,A與B兩個對象相互持有。像下面這種情況: class A { B b; public A(B b) { this.b=b; } } class B { A a; public

原创 JVM垃圾收集(一) 尋找垃圾

1 如何判斷對象爲“垃圾” 在垃圾回收之前,首先要判斷哪些對象爲“垃圾”,也就是判斷哪些對象已經死去了,這裏面的死去的概念就是這個對象不可能再被任何途徑使用。 1.1     引用計數器法 一個很簡單、效率也很高的方法。給對象添加一個

原创 JVM垃圾收集(四) 堆上分區分配與回收

1 堆分區 1.1 新生代(Young Generation)和老年代(Tenured Generation) JVM根據對象生存的特點,將對象劃分爲新生代和老年代。大部分對象在JVM內存中處是新生代,他們有一個特點,“朝生夕死”,即

原创 Integer 緩存策略

在很多情況下,容易有一種假象,即基本類型與他們的對象包裝器是一樣的,只是他們的相等性不同。當使用==比較對象時,只不過檢測他們是否指向同一個儲存區域。因此,下面的比較通常不會成立:<span style="font-size:18px;"

原创 4 IoC容器的依賴注入(2)

相對於Bean的創建過程,注入過程顯得簡單而清晰的多。 注入的過程整體分爲兩個階段: 第一個階段是依據BeanDefition定義的property找到相關的屬性值,這個過程中如果定義了autowireByName 或者autowireB

原创 3 IoC容器的依賴注入(1)

在applicationContext加載的時候,已經將BeanDefition保存在一個concurrentHashMap中,然而這些並不是真正的bean,真正的bean其實還沒有初始化以及依賴注入。對於整個依賴注入的過程,大致可以分爲

原创 JVM 如何創建Java對象

在Java程序中,創建一個對象通常需要一個new關鍵字就夠了,但是在虛擬機中,這個過程卻有點複雜,這裏麪包括了類加載、內存分配、初始化零值等等一系列的步驟。 下面來看看JVM如何創建一個對象(這裏面的對象僅僅限於不同的Java對象,不包括

原创 D對象包裝器與自動裝箱 基本數據類型的equals與==

所有的基本類型都有一個與之對應的類,通常,這些類稱爲包裝器。這些包裝器的對象擁有很鮮明的名字:Integer Long Float Double Short Byte Character Void 和Boolean。這裏除了八種基本數據類

原创 JVM垃圾收集(二)垃圾收集算法

1 標記-清除算法(Mark-Sweep) 這是最基礎的算法,這個算法分爲兩個階段標記和清除。首先標記出所有需要清除的對象,然後統一回收標記的對象。這種算法是最簡單的,後續的算法都是在它的基礎上改進得到的。它存在兩個問題: 它的標記和清

原创 volatile 關鍵字

1 volatile 的作用 Volatile 是Java中的一個關鍵字,僅用來修飾屬性,不能修飾類和方法。它提供了一種弱的同步機制,用於多線程間的變量同步。它保證在某個線程中對變量的修改,可以立即被其他持有這個變量的線程看到。從內存模

原创 Spring的自動裝配

1Spring自動裝配的分類 Spring能自動裝配Bean與Bean之間的依賴關係,即無須使用ref顯式地指定依賴Bean,而是由Spring容器檢查XML配置文件內容。根據某種規則,爲調用者Bean注入被依賴的Bean。 Spring