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

一文詳解Java中Integer是如何應(yīng)用享元模式的

 更新時(shí)間:2025年10月23日 08:20:46   作者:軟件檸檬  
在Java中,享元模式在Integer和String類(lèi)中有顯著的應(yīng)用,下面這篇文章主要介紹了Java中Integer是如何應(yīng)用享元模式的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

什么是享元模式?

享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,其核心思想是通過(guò)共享技術(shù)有效地支持大量細(xì)粒度對(duì)象的復(fù)用,從而減少內(nèi)存中對(duì)象的數(shù)量,降低系統(tǒng)資源消耗。

享元模式適用于以下場(chǎng)景:

  • 系統(tǒng)中存在大量相似或重復(fù)的對(duì)象;
  • 這些對(duì)象的大部分狀態(tài)可以外部化(即可以抽離為外部參數(shù));
  • 對(duì)象的內(nèi)部狀態(tài)(享元對(duì)象共享的部分)一旦創(chuàng)建就不改變(通常是不可變的);
  • 應(yīng)用需要在性能和內(nèi)存之間取得平衡。

享元模式通常包含以下幾個(gè)角色:

  • Flyweight(抽象享元類(lèi)):定義對(duì)象的接口,通過(guò)參數(shù)接受外部狀態(tài);
  • ConcreteFlyweight(具體享元類(lèi)):實(shí)現(xiàn)抽象享元接口,內(nèi)部狀態(tài)存儲(chǔ)在對(duì)象內(nèi)部;
  • UnsharedConcreteFlyweight(非共享享元類(lèi)):不共享的對(duì)象,通常作為組合結(jié)構(gòu)的一部分;
  • FlyweightFactory(享元工廠):創(chuàng)建并管理享元對(duì)象,確保共享對(duì)象不被重復(fù)創(chuàng)建;
  • Client(客戶(hù)端):維持對(duì)享元對(duì)象的引用,并計(jì)算/傳遞外部狀態(tài)。

享元模式的關(guān)鍵在于區(qū)分內(nèi)部狀態(tài)(共享、不變)和外部狀態(tài)(由客戶(hù)端維護(hù)、隨環(huán)境變化)。

Java中Integer是如何應(yīng)用享元模式的?

Java 中的 Integer 類(lèi)通過(guò) IntegerCache 實(shí)現(xiàn)了享元模式。在 Integer.valueOf(int i) 方法中,對(duì) -128 到 127 范圍內(nèi)的整數(shù)進(jìn)行了緩存:

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

這意味著:

? 在 -128 到 127 范圍內(nèi),使用 Integer.valueOf() 或自動(dòng)裝箱時(shí),會(huì)返回緩存池中的同一個(gè)對(duì)象實(shí)例:

Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true —— 同一個(gè)對(duì)象引用

? 超出該范圍時(shí),每次都會(huì)創(chuàng)建新對(duì)象:

Integer x = 200;
Integer y = 200;
System.out.println(x == y); // false —— 不同對(duì)象引用

?? 注意:應(yīng)使用 .equals() 方法比較值是否相等,而不是 ==(后者比較的是引用)。

該緩存范圍可通過(guò) JVM 參數(shù) -XX:AutoBoxCacheMax=N 調(diào)整上限(下限固定為 -128)。

這種設(shè)計(jì)減少了小整數(shù)頻繁創(chuàng)建對(duì)象的開(kāi)銷(xiāo),是享元模式的經(jīng)典應(yīng)用。

享元模式的其他應(yīng)用?

  1. String 常量池
    Java 中的字符串字面量會(huì)被緩存在字符串常量池中,相同的字符串字面量共享同一對(duì)象:

    String s1 = "hello";
    String s2 = "hello";
    System.out.println(s1 == s2); // true
    
  2. 數(shù)據(jù)庫(kù)連接池 / 線程池
    雖然不完全符合傳統(tǒng)享元定義,但思想類(lèi)似 —— 復(fù)用昂貴資源,避免重復(fù)創(chuàng)建和銷(xiāo)毀。

  3. GUI 系統(tǒng)中的字體、顏色對(duì)象
    在圖形界面中,相同字體或顏色對(duì)象可被多個(gè)控件共享,避免重復(fù)實(shí)例化。

  4. 游戲開(kāi)發(fā)中的粒子系統(tǒng)
    大量相似粒子(如爆炸火花、雨滴)共享紋理、行為等內(nèi)部狀態(tài),位置、速度等作為外部狀態(tài)傳入。

  5. 文本編輯器中的字符對(duì)象
    每個(gè)字符(如 ‘a’)在文檔中可能重復(fù)出現(xiàn)成千上萬(wàn)次,享元模式可讓所有 ‘a’ 共享同一個(gè)字符對(duì)象,僅位置、樣式等作為外部狀態(tài)。

  6. Java 中的 BooleanByte、ShortLong、Character 緩存
    類(lèi)似 Integer,這些包裝類(lèi)也對(duì)部分值范圍做了緩存(如 Boolean 緩存 TRUEFALSE,Character 緩存 0~127)。

? 總結(jié):享元模式在需要“大量重復(fù)對(duì)象 + 內(nèi)存敏感”的場(chǎng)景中非常有用,是空間換時(shí)間的經(jīng)典優(yōu)化手段。

到此這篇關(guān)于Java中Integer是如何應(yīng)用享元模式的的文章就介紹到這了,更多相關(guān)Java中Integer應(yīng)用享元模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(50)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(50)

    下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你
    2021-08-08
  • java中Timer定時(shí)器的使用和啟動(dòng)方式

    java中Timer定時(shí)器的使用和啟動(dòng)方式

    這篇文章主要介紹了java中Timer定時(shí)器的使用和啟動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JDBC 與 MyBatis從基礎(chǔ)到實(shí)踐

    JDBC 與 MyBatis從基礎(chǔ)到實(shí)踐

    JDBC(Java Database Connectivity)即 Java 數(shù)據(jù)庫(kù)連接,是 Java 語(yǔ)言中用來(lái)規(guī)范客戶(hù)端程序如何來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用程序接口,提供了諸如查詢(xún)和更新數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法,這篇文章主要介紹了JDBC 與 MyBatis從基礎(chǔ)到實(shí)踐,需要的朋友可以參考下
    2025-04-04
  • java多線程-同步塊實(shí)例講解

    java多線程-同步塊實(shí)例講解

    本文主要介紹java多線程-同步塊的知識(shí),這里整理了相關(guān)的詳細(xì)資料及簡(jiǎn)單示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • java開(kāi)發(fā)之Jdbc分頁(yè)源碼詳解

    java開(kāi)發(fā)之Jdbc分頁(yè)源碼詳解

    這篇文章主要介紹了java開(kāi)發(fā)之Jdb分頁(yè)源碼詳解,需要的朋友可以參考下
    2020-02-02
  • Java將字符串寫(xiě)入文本文件代碼示例

    Java將字符串寫(xiě)入文本文件代碼示例

    這篇文章主要介紹了Java將字符串寫(xiě)入文本文件代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法

    Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法

    這篇文章主要介紹了Mybatis-Plus使用p6spy對(duì)SQL性能進(jìn)行監(jiān)控的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java數(shù)學(xué)工具類(lèi)MathUtil詳解

    Java數(shù)學(xué)工具類(lèi)MathUtil詳解

    這篇文章主要為大家詳細(xì)介紹了Java數(shù)學(xué)工具類(lèi)MathUtil的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java操作itextpdf實(shí)現(xiàn)PDF添加文字,圖片和簽名

    Java操作itextpdf實(shí)現(xiàn)PDF添加文字,圖片和簽名

    這篇文章主要為大家詳細(xì)介紹了Java如何操作itextpdf實(shí)現(xiàn)PDF添加文字,圖片和簽名等功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2025-01-01
  • Spring中的@Lazy注解用法實(shí)例

    Spring中的@Lazy注解用法實(shí)例

    這篇文章主要介紹了Spring中的@Lazy注解用法實(shí)例,在Spring中常用于單實(shí)例Bean對(duì)象的創(chuàng)建和使用,單實(shí)例Bean懶加載容器啟動(dòng)后不創(chuàng)建對(duì)象,而是在第一次獲取Bean創(chuàng)建對(duì)象時(shí),初始化,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

恩平市| 开平市| 临夏市| 获嘉县| 南投县| 阳城县| 鹤岗市| 洪雅县| 开封县| 隆德县| 闻喜县| 攀枝花市| 桓台县| 嘉禾县| 双鸭山市| 永靖县| 元氏县| 长沙市| 汉阴县| 诸暨市| 淅川县| 谷城县| 白朗县| 齐齐哈尔市| 晋州市| 姜堰市| 洛隆县| 广南县| 桃源县| 西畴县| 开阳县| 东台市| 大冶市| 灌阳县| 金华市| 贵阳市| 蓝山县| 叙永县| 连州市| 濮阳市| 大渡口区|