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 小时前
Redis 高频考试面试知识点2(主从复制、缓存穿透/击穿/雪崩、集群分片、切片)
redis·缓存·面试
代码中介商14 小时前
Redis位图实战:海量数据高效处理
数据库·redis·缓存
小二·15 小时前
Redis 7 实战:缓存/消息队列/分布式锁生产级实现
redis·分布式·缓存
abigale0315 小时前
LangChain 实践4: 7个人AI助手全栈项目:完整拆解+分阶段开发指南
缓存·langchain·prompt·token·rag·lcel
map1e_zjc15 小时前
Redis入门笔记
数据库·redis·缓存
我是一颗柠檬15 小时前
【Java后端技术亮点】Feed流三级缓存设计,从10秒到100毫秒的优化实战
java·开发语言·后端·缓存
Java 码思客15 小时前
【Redis分布式缓存实战】第3章 Redis核心机制深度解析
redis·分布式·缓存
CDN36015 小时前
【前端实战】LCP指标从2.5s优化至0.8s!用360CDN的WebP自适应与缓存策略榨干性能
前端·缓存
江湖中的阿龙16 小时前
Redis 五大核心数据类型底层原理
数据库·redis·缓存
yurenpai(27届找实习中)1 天前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存