java 缓存_java中整型的缓存机制

9f7955a98c1a8976310dd304a6652f6b.png

本文将介绍Java中Integer的缓存相关知识。这是在Java 5中引入的一个有助于节省内存、提高性能的功能。首先看一个使用Integer的示例代码,从中学习其缓存行为。接着我们将为什么这么实现以及他到底是如何实现的。你能猜出下面的Java程序的输出结果吗。如果你的结果和真正结果不一样,那么你就要好好看看本文了。

e93c4d873b9d615bb8e0be06e10d5a90.png

883daff44070f745e72810d520dce817.png


执行结果

上述代码执行结果如上图。

在Integer的操作上,jdk引入了缓存的实现来提高性能节省内存,复用了-128到127区间的Integer。

对于Integer i = 0这种赋值语句,Java的编译器把基本数据类型自动转换成封装类对象的过程叫做自动装箱,相当于使用valueOf方法。

我们看一下valueOf方法源码

9d0f4f4cd744e173807836f8e3c5a250.png

可以看到如果i在-128-127(默认127,可以通过XX:AutoBoxCacheMax=size参数修改)数值区间内,valueOf会直接返回缓存结果。

f0c43b1c893c07795a5a4bd75090c878.png

IntegerCache是Integer底下的一个静态内部类,IntegerCache内部维护了一个Integer数据,与两个int属性(低位和高位)。

在static代码块中,会循环实例化cache数组中的Integer对象,完成缓存的初始化工作。

为什么选择-128到127这个范围呢?因为这个范围的数字是最被广泛使用的。

下面贴一段 Java Integer Cache 文档的译文(译文来自Hollis):

20e6f31202461860678845702762645c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值