關於java包裝類型的緩存

除了Float 和 Double 外,其餘包裝數據類型都會緩存 -128 ~127 的值,對於 Integer var = ? 在 -127~128 之間的賦值,Integer 對像由IntegerCache.cache 產生,會複用已有對像,這個區間內的Integer 值能夠直接使用 == 判斷,可是這個區間外的全部數據都會在堆上產生,並不會複用已有對像。java

源碼:緩存

public static Integer valueOf(int var0) {
        return var0 >= -128 && var0 <= Integer.IntegerCache.high ? Integer.IntegerCache.cache[var0 + 128] : new Integer(var0);
    }

在JDK9直接把new的構造方法過期,推薦使用valueOf ,利用緩存提高性能。性能

Integer 是惟一可修改緩存範圍的包裝類,在vm options 加入參數 -XX:autoBoxCacheMax=7777,便可設置最大緩存值爲7777。code

 

摘自:《碼出高效》源碼

相關文章
相關標籤/搜索