為什么Integer緩存-128 ~ 127

背景

面試題, 相關問題的考察.
題目大概是, 包裝類型Integer == 比較的時候 : -127 ~ 128 是否相等.
其他是否相等?

原理

== 比較的是地址. 如果是不同的對象, 那么就不相等.

實踐

下面是幾個簡單實踐.

全部新建對象

解釋: 新建對象后, 地址不同, 所以都是false
在這里插入圖片描述

不新建對象

暫時的理解: -127 ~ 128 比較的對象的緩存
在這里插入圖片描述

一些思考

時間多, 一些靈感

為什么設計這個緩存

HotSpot 團隊研究, 90% 以上的整型使用落在 -128~127范圍內(2000年代初期數據).
緩存范圍 -128~127共 256 個對象 ≈ 4KB 內存(每個 Integer對象約16B)

為什么不多緩存一點

擴大到 -256~255則需 512 對象 ≈ 8KB,收益遞減

冷知識: 上限值可以調整

部分源碼如下:

// IntegerCache 源碼片段(OpenJDK 17)
private static class IntegerCache {static final int low = -128; // 硬編碼下限static final int high;static {high = java.lang.Integer.getInteger("java.lang.Integer.IntegerCache.high", 127);// 上限可通過VM參數調整}
}

為什么下限值不能自定義呢?

防止濫用:若允許下限調至 -1,000,000,可能導致緩存占用數百MB內存

其實其他包裝類型也有緩存

緩存范圍如下:

緩存范圍可調性
Integer-128~127僅上限可調
Long-128~127完全不可調
Short-128~127完全不可調
Character0~127(ASCII范圍)完全不可調

這個居然也是API?

Integer b = new Integer(100); // ?? 已棄用API

9版本被棄用了: 神奇!

/*** @deprecated* It is rarely appropriate to use this constructor. * Use {@link #valueOf(int)} to take advantage of caching.*/
@Deprecated(since="9")
public Integer(int value) {this.value = value;
}

設計思想

這種設計體現了 Java “80/20法則” 的工程哲學——用最小成本解決大多數問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96047.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微軟Wasm學習-創建一個最簡單的c#WebAssembly測試工程

要創建一個最簡單的微軟 WebAssembly(Wasm)測試工程,最直接的方式是使用 Blazor WebAssembly,這是微軟官方推薦的 WebAssembly 開發框架。下面是創建和運行最簡單 Blazor WebAssembly 項目的步驟: 相關:微…

通過 GitHub520 項目自動獲取最新 Hosts 配置,無需手動查詢 IP。

操作步驟:打開終端Command 空格 聚焦搜索“終端”,打開應用。執行一鍵腳本復制以下命令粘貼到終端運行(需輸入密碼授權):bashsed -i "" "/# GitHub520 Host Start/,/# Github520 Host End/d" /et…

C# 目錄與文件操作筆記

一、基本概念1. 數據存儲方式對比存儲方式適用場景特點數據庫存儲大量、關系復雜、有序的數據結構化強,支持復雜查詢和事務文件存儲少量、關系簡單的數據(如日志)操作簡便,可存儲于任意介質2. 文件與流文件:存儲在磁盤…

docker部署flask并遷移至內網

需要直接使用的可以使用下面的鏈接: 通過網盤分享的文件:docker_flask.tar 鏈接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwdqxqm 提取碼: qxqm 來自百度網盤超級會員v6的分享 外網部署docker版flask 目錄結構 ./miniconda-docker/ ├── d…

161. Java Lambda 表達式 - 使用工廠方法創建 Predicates

文章目錄161. Java Lambda 表達式 - 使用工廠方法創建 Predicates🎯 Predicate 工廠方法概覽🧪 示例一:Predicate.isEqual() 工廠方法🧪 示例二:Predicate.not() 工廠方法(Java 11)&#x1f3af…

c#Blazor WebAssembly在網頁中多線程計算1000萬次求余

在 Blazor WebAssembly 中實現多線程計算并獲取線程 ID 是可行的,但需要正確配置多線程環境并處理線程安全和 UI 更新邏輯。以下是完整示例和檢測方法:一、準備工作:啟用多線程支持首先需確保項目已啟用 WebAssembly 多線程,修改項…

鼠標右鍵沒有“通過VSCode打開文件夾”

1, WinR 打開運行,輸入regedit,打開注冊表,找到HKEY_CLASSES_ROOT\*\shell分支,如果沒有shell分支,則在*下點擊右鍵,選擇“新建-項”,建立shell分支。 2, 在shell下新建“VisualCod…

[ Spring 框架 ] 框架搭建和屬性賦值

目錄 1. Spring定義: (1). IOC( Inversion of Control): (2). AOP (Aspect Oriented Programming): (3)一站式: 2. spring搭建: (1). 創建一個Maven項目 (2). 導入核心 jar包 (3). 編寫 spring 配置文件 (4). 編寫實體類,并生成set方法 (5). 在resource中加入spring核…

前端 大文件分片下載上傳

前端 大文件分片下載上傳 背景介紹: 當前項目是給投行部門做系統,業務方需要有專門的文檔中心去管理文件,包括但是不限于文件的上傳和下載等等。筆者本來就是采用的瀏覽器表單上傳的方式進行文件上傳,但是誰曾想在進行稍微大一點的…

【Python練習】097. 編寫一個函數,實現簡單的版本控制工具

097. 編寫一個函數,實現簡單的版本控制工具 097. 編寫一個函數,實現簡單的版本控制工具 示例代碼 功能說明 使用方法 注意事項 實現方法 基于文件快照的實現方法 基于差異存儲的實現方法 基于命令模式的實現方法 基于Git-like的實現方法 097. 編寫一個函數,實現簡單的版本控…

嵌入式硬件篇---Tof

TOF 的原理與本質TOF(Time of Flight,飛行時間)是一種通過測量信號(通常是光)在空間中傳播時間來計算距離的技術。其本質是利用 “距離 速度 時間” 的物理公式:通過發射信號(如激光、紅外光&…

Vue diff簡介

Vue3 diff 最長遞增子序列雙端diff 理念 相同的前置和后置元素的預處理,考慮邊界情況,減少移動;最長遞增子序列(動態規劃、二分法),判斷是否需要移動 操作 前置與后置預處理判斷是否需要移動 遞增法&#x…

羅技MX Anywhere 2S鼠標修復記錄

【現象】單擊時總是出現雙擊的現象 【問題原因】從網絡收集: 說法1,歐姆龍微動損壞;說法2,按鍵磨損導致按鍵和微動開關接觸不良; 【問題排查】 微動損壞:拆掉殼子后,用手按住左鍵的微動開關&…

常見IP模塊的仲裁策略和實現

在一個 Message Unit 中包含兩個 Core(處理器核心),它們之間訪問共享資源(如寄存器、FIFO、buffer 等)時,仲裁機制(Arbitration) 是確保系統穩定性和正確性的關鍵。以下是常見的仲裁…

上周60+TRO案件,波比的游戲時間/丹迪世界/飛盤/迪奧/多輪維權,手表/汽車品牌持續發力,垃圾桶專利等新增侵權風險!

賽貝整理上周(2025年8月11日-8月15日)的TRO訴訟案件發案情況,根據賽貝TRO案件查詢系統了解到,上周合計發起了超60起訴訟案件,涵蓋 IP /品牌、版權、專利等多個領域,涉及影視、奢侈品、汽車、游戲、日常用品…

用 Python 在 30 分鐘內搭一個「可回放的實時日志」——把攻擊流量變成可視化劇情

業務背景 我們運營一款 FPS 端游,外掛作者常把 DDoS 偽裝成「玩家掉線」來騙客服。以前排查要撈 CDN 日志、對時間戳、人工比對,平均 2 小時才能定位。現在用一條 30 行的 Python 腳本把邊緣節點日志實時打到 Kafka,再回放到 Grafana&#xf…

如何將 LM Studio 與 ONLYOFFICE 結合使用,實現安全的本地 AI 文檔編輯

人工智能正在改變我們的工作方式——但如今大多數 AI 工具都存在弊端:速度和便利性雖有所提升,但也意味著數據需要發送到外部服務器。對于教育工作者、企業、非政府組織以及任何處理敏感信息的人來說,這都是不可接受的風險。 LM Studio 和 O…

超市電商銷售分析項目:從數據分析到業務決策

國際超市電商銷售數據分析實戰:從數據清洗到業務決策的完整流程 在電商行業,數據是驅動業務增長的核心引擎。本文將以國際超市電商銷售數據為研究對象,完整拆解從數據準備 → 深度分析 → 策略輸出的實戰流程,涵蓋數據清洗、多維度…

GitHub 熱榜項目 - 日榜(2025-08-17)

GitHub 熱榜項目 - 日榜(2025-08-17) 生成于:2025-08-17 統計摘要 共發現熱門項目:12 個 榜單類型:日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術趨勢:1) AI基礎設施持續爆發,Archon OS和Parlant聚焦AI任務管…

記憶翻牌游戲 greenfoot 開發

記憶翻牌游戲是一種經典的益智游戲,玩家需要翻開卡片并記住它們的位置,然后找到所有匹配的卡片對。 核心玩法 游戲開始時,所有卡片都是背面朝上玩家每次可以翻開兩張卡片如果兩張卡片圖案相同,則保持翻開狀態(匹配成功…