天天看點

Java Integer類的緩存

首先看一段代碼(使用JDK 5),如下:

輸出結果:

The Java Language Specification, 3rd Edition 寫道:

檢視jdk源碼,如下:

這兒的IntegerCache有一個靜态的Integer數組,在類加載時就将-128 到 127 的Integer對象建立了,并儲存在cache數組中,一旦程式調用valueOf 方法,如果i的值是在-128 到 127 之間就直接在cache緩存數組中去取Integer對象。

再看其它的包裝器:

Boolean:(全部緩存)

Byte:(全部緩存)

Character(<= 127緩存)

Short(-128 — 127緩存)

Long(-128 — 127緩存)

Float(沒有緩存)

Doulbe(沒有緩存)

同樣,對于垃圾回收器來說:

這裡的代碼不會有對象符合垃圾回收器的條件,這兒的i雖然被賦予null,但它之前指向的是cache中的Integer對象,而cache沒有被賦null,是以Integer(100)這個對象還是存在。

而如果i大于127或小于-128則它所指向的對象将符合垃圾回收的條件:

轉載位址: http://blog.csdn.net/xiaohai0504/article/details/6885137