最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的Integer緩存池用法

 更新時間:2025年02月07日 11:01:35   作者:空說  
Java的Integer緩存池主要為了提升性能和節(jié)省內(nèi)存,它緩存了-128到127范圍內(nèi)的Integer對象,因此這些對象在比較時會直接比較引用,而不是值,其他包裝類如Byte、Short、Character也有類似的緩存池

Java的Integer緩沖池?

Integer 緩存池主要為了提升性能和節(jié)省內(nèi)存。根據(jù)實踐發(fā)現(xiàn)大部分的數(shù)據(jù)操作都集中在值比較小的范圍,因此緩存這些對象可以減少內(nèi)存分配和垃圾回收的負(fù)擔(dān),提升性能。

在-128到 127范圍內(nèi)的 Integer 對象會被緩存和復(fù)用。

原理

int 在自動裝箱的時候會調(diào)用Integer.valueOf,進而用到了 IntegerCache。

@HotSpotIntrinsicCandidate
public static Integer value0f(int i){
    if(i>= IntegerCache.low && i<= IntegerCache.high)  //如果傳入的int值在緩存范圍內(nèi),則直接從緩存中返回Integer對象
        return IntegerCache.cache[i+(-IntegerCache.low)];
    return new Integer(i);                              //否則,創(chuàng)建新的Integer對象
}
private static class IntegerCache{
    static final int low=-128;
    static final int high;
    static final Integer cache[];
    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue = VM.getSavedProperty( key:"java.lang.Integer.IntegerCache.high");
        if(integerCacheHighPropValue != null){
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i,127);
                // Maximum array size is Integer.MAX_VALUE
                h= Math.min(i,Integer.MAX_VALUE-(-low)-1);
            }catch( NumberFormatException nfe){
            //If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;
        
        cache =new Integer[(high-low)+1];
        int i = low;
        for(int k=0;k< cache.length; k++)    //遍歷創(chuàng)建-128-127的所有對象
            cache[k]= new Integer(i++);
        assert IntegerCache.high >= 127;
    }
    
    private IntegerCache(){}
}

所以這里還有個面試題:就是為啥 Integer 127 之內(nèi)的相等,而超過 127 的就不等了?

因為小于等于127的 Integer 對象是從同一個緩存池中獲取的,它們指向的是相同的對象實例,所以它們的引用相等

不僅 Integer 有,Long 同樣有一個緩存池,不過范圍是寫死的 -128 到 127,不能通過JVM參數(shù)進行調(diào)整

@HotSpotIntrinsicCandidate
public static Long value0f(long l){
    final int offset = 128;
    if(l>= -128 &&l<= 127){ // will cache
        return LongCache.cache[(int)l + offsetl];
    }
    return new Long(l);
}

總結(jié)

  • Byte,Short,Integer,Long這4種包裝類默認(rèn)創(chuàng)建了數(shù)值[-128,127]的相應(yīng)類型的緩存數(shù)據(jù)
  • Character 創(chuàng)建了數(shù)值在 [0,127]范圍的緩存數(shù)據(jù)
  • Boolean 直接返回 True or False
  • Float 和 Double 沒有緩存數(shù)據(jù),畢竟是小數(shù),能存的數(shù)太多了

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java連接Oracle數(shù)據(jù)庫實例解析

    Java連接Oracle數(shù)據(jù)庫實例解析

    數(shù)據(jù)庫的操作是當(dāng)前系統(tǒng)開發(fā)必不可少的開發(fā)部分之一。接下來通過本文給大家介紹Java連接Oracle數(shù)據(jù)庫實例解析,非常不錯具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • 使用hutool工具進行導(dǎo)入導(dǎo)出excel表格

    使用hutool工具進行導(dǎo)入導(dǎo)出excel表格

    如何在后臺添加導(dǎo)入導(dǎo)出表格的功能呢,本期的文章將會帶領(lǐng)小伙伴們一起實現(xiàn)此功能,文中有詳細(xì)的代碼示例和圖文介紹,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-10-10
  • java外部類與內(nèi)部類的關(guān)系詳解

    java外部類與內(nèi)部類的關(guān)系詳解

    本文詳細(xì)講解了java外部類與內(nèi)部類的關(guān)系,用代碼演示了外部類調(diào)用內(nèi)部類的方法。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java判斷是否為閏年的方法示例

    Java判斷是否為閏年的方法示例

    這篇文章主要介紹了Java判斷是否為閏年的方法示例,本文直接給出示例代碼,并講解了判斷原理,需要的朋友可以參考下
    2015-06-06
  • Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用

    Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用

    在開發(fā)過程中我們常常會用到兩個數(shù)據(jù)庫,一個數(shù)據(jù)用來實現(xiàn)一些常規(guī)的增刪改查,另外一個數(shù)據(jù)庫用來實時存數(shù)據(jù)。進行數(shù)據(jù)的統(tǒng)計分析??梢宰x寫分離??梢愿玫膬?yōu)化和提高效率;或者兩個數(shù)據(jù)存在業(yè)務(wù)分離的時候也需要多個數(shù)據(jù)源來實現(xiàn)
    2022-06-06
  • 怎樣給Kafka新增分區(qū)

    怎樣給Kafka新增分區(qū)

    這篇文章主要介紹了怎樣給Kafka新增分區(qū)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot整合jnotify實現(xiàn)針對指定目錄及其(動態(tài))子目錄的監(jiān)聽的方法

    SpringBoot整合jnotify實現(xiàn)針對指定目錄及其(動態(tài))子目錄的監(jiān)聽的方法

    本文介紹了JNotify這一Java庫在SpringBoot中的應(yīng)用,JNotify允許應(yīng)用程序監(jiān)聽文件系統(tǒng)事件,包括文件夾/文件的創(chuàng)建、刪除、修改和重命名,由于JNotify底層調(diào)用的關(guān)鍵部分是C語言開發(fā)的,所以在使用前需要在系統(tǒng)中加入相應(yīng)的動態(tài)庫
    2024-10-10
  • Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法

    Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法

    本篇文章主要介紹了Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • springboot+redis實現(xiàn)訂單過期(超時取消)功能的方法詳解

    springboot+redis實現(xiàn)訂單過期(超時取消)功能的方法詳解

    在Spring Boot中使用Redis實現(xiàn)訂單過期(超時取消)功能,有多種成熟方案,本文為大家整理了幾個詳細(xì)方法,文中的示例代碼講解詳細(xì),大家可以根據(jù)需要進行選擇
    2025-12-12
  • SpringBoot?中使用?Validation?校驗參數(shù)的方法詳解

    SpringBoot?中使用?Validation?校驗參數(shù)的方法詳解

    Validation?是用于檢查程序代碼中參數(shù)的有效性的框架,作為?Spring?框架中的一個參數(shù)校驗工具,集成在?spring-context?包中,這篇文章主要介紹了SpringBoot?中使用?Validation?校驗參數(shù),需要的朋友可以參考下
    2022-05-05

最新評論

濮阳市| 渑池县| 平原县| 静乐县| 繁峙县| 合水县| 驻马店市| 沁阳市| 吉水县| 阿巴嘎旗| 天气| 乐业县| 观塘区| 旬邑县| 绥宁县| 天峻县| 徐汇区| 光泽县| 潮安县| 富宁县| 澄城县| 亚东县| 股票| 霍城县| 大名县| 抚顺县| 闸北区| 女性| 中西区| 长白| 松潘县| 庆云县| 辽宁省| 米脂县| 百色市| 彭泽县| 德兴市| 方城县| 营山县| 来宾市| 兰溪市|