关于java包装类型的缓存

本文深入探讨了Java中Integer缓存机制的工作原理,详细解释了-128至127之间的Integer对象如何被缓存及复用,以及如何通过JVM参数调整缓存范围。此外,还介绍了JDK9中对Integer构造方法的改进,推荐使用valueOf方法来提高性能。

除了Float 和 Double 外,其他包装数据类型都会缓存 -128 ~127 的值,对于 Integer var = ? 在 -127~128 之间的赋值,Integer 对像由IntegerCache.cache 产生,会复用已有对像,这个区间内的Integer 值可以直接使用 == 判断,但是这个区间外的所有数据都会在堆上产生,并不会复用已有对像。

源码:

 public static Integer valueOf(int var0) {
        return var0 >= -128 && var0 <= Integer.IntegerCache.high ? Integer.IntegerCache.cache[var0 + 128] : new Integer(var0);
    }

在JDK9直接把new的构造方法过时,推荐使用valueOf ,利用缓存提升性能。

Integer 是唯一可修改缓存范围的包装类,在vm options 加入参数 -XX:autoBoxCacheMax=7777,即可设置最大缓存值为7777。

 

摘自:《码出高效》

 

转载于:https://my.oschina.net/u/2552286/blog/2990515

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值