integer修改缓存大小

在 Java 中,Integer 类的缓存(也叫享元模式)是为了优化小整数的创建性能,默认缓存范围是 [-128, 127]。你可以通过调整 JVM 参数来修改缓存的上限 (下限 -128 固定不可改),下面我会详细说明具体方法和原理。

一、修改 Integer 缓存大小的方法

1. 核心原理

Integer 的缓存由 IntegerCache 内部类实现,其缓存上限默认是 127,但可以通过 JVM 参数 java.lang.Integer.IntegerCache.high 自定义。注意:

  • 下限 -128 是硬编码的,无法修改;
  • 上限只能增大(比如设为 256、500),不能小于 127(否则仍会使用 127);
  • 该参数仅对通过 Integer.valueOf() 创建的对象生效(new Integer() 会直接新建对象,不使用缓存)。
2. 具体操作步骤
(1)运行时指定 JVM 参数

在启动 Java 程序时,添加以下参数调整缓存上限(示例:将上限设为 256):

bash

运行

复制代码
java -Djava.lang.Integer.IntegerCache.high=256 你的主类名
(2)代码验证缓存是否生效

下面的代码可以验证缓存是否生效(对比不同上限下的对象地址):

java

运行

复制代码
public class IntegerCacheTest {
    public static void main(String[] args) {
        // 测试 127(默认缓存)
        Integer a = Integer.valueOf(127);
        Integer b = Integer.valueOf(127);
        System.out.println("127 是否来自缓存:" + (a == b)); // true

        // 测试 128(默认不缓存,修改参数后缓存)
        Integer c = Integer.valueOf(128);
        Integer d = Integer.valueOf(128);
        System.out.println("128 是否来自缓存:" + (c == d)); 
        // 默认输出 false,设置 -Djava.lang.Integer.IntegerCache.high=256 后输出 true
    }
}
3. 特殊场景:IDE 中配置 JVM 参数

如果你用 IDEA/Eclipse 运行代码,需要在运行配置中添加参数:

  • IDEA:Run/Debug Configurations → VM options → 输入 -Djava.lang.Integer.IntegerCache.high=256;
  • Eclipse:Run → Run Configurations → Arguments → VM arguments → 输入上述参数。

二、注意事项

  1. 仅对 valueOf () 生效 :new Integer(n) 会绕过缓存,直接创建新对象,即使 n 在缓存范围内;
  2. 性能权衡:缓存上限设置过大(比如 10000)会占用更多内存,需根据实际需求调整(比如业务中频繁使用 0-200 的整数,可设为 200);
  3. 兼容性:该参数是 Java 官方认可的,所有主流 JDK(Oracle JDK、OpenJDK)都支持。

总结

  1. Integer 缓存默认范围是 [-128, 127],可通过 JVM 参数 java.lang.Integer.IntegerCache.high 修改上限(下限固定);
  2. 调整参数的方式是启动程序时添加 -Djava.lang.Integer.IntegerCache.high=自定义值;
  3. 缓存仅对 Integer.valueOf() 生效,new Integer() 不使用缓存,且缓存上限不宜过大(避免内存浪费)。
相关推荐
程序猿编码14 小时前
纯 C++ 手写 LLM 推理引擎:分页 KV 缓存、连续批、多卡张量并行全部内置
c++·深度学习·缓存·大模型推理·自动微分·模型推理
code2cat14 小时前
【随笔】RAG检索缓存:复用证据之前,先把权限和版本放进缓存键
java·人工智能·缓存·知识库·rag
牧瀬クリスだ18 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
讯捷蓝达19 小时前
HPE Nimble CS3000存储,断电恢复后,双控缓存异常,存储卷无法正常启动
缓存
Lucis__1 天前
Redis持久化机制解析
redis·缓存·操作系统·文件·非关系型数据库·1024程序员节
李纲明1 天前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
码士集团小青1 天前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
一条泥憨鱼1 天前
【Redis | 黑马点评】附近商铺功能源码解读
数据库·redis·缓存
小南家的青蛙2 天前
Redis的资料
redis·缓存·1024程序员节
深圳市恒星物联科技有限公司2 天前
排水管网监测后期运维成本高吗?成本构成与控制策略分析
运维·缓存