public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
所以 Integer a = 20; Integer b = 20; a==b true 用的IntegerCache缓存对象
Integer c =200; Integer d = 200; c==d false new 的对象
Integer 提供缓存机制,能够缓存-128,127之间的int类型,在装箱的时候避免多次创建对象,
最大值 127 可以通过 JVM 的启动参数 -XX:AutoBoxCacheMax=size 修改。 缓存通过一个 for 循环实现。从小到大的创建尽可能多的整数并存储在一个名为 cache 的整数数组中。这个缓存会在 Integer 类第一次被使用的时候被初始化出来。以后,就可以使用缓存中包含的实例对象,而不是创建一个新的实例,
其他缓存的对象
这种缓存行为不仅适用于Integer对象。我们针对所有整数类型的类都有类似的缓存机制。
有 ByteCache 用于缓存 Byte 对象
有 ShortCache 用于缓存 Short 对象
有 LongCache 用于缓存 Long 对象
有 CharacterCache 用于缓存 Character 对象
Byte,Short,Long 有固定范围: -128 到 127。对于 Character, 范围是 0 到 127。除了 Integer 可以通过参数改变范围外,其它的都不行。
本文深入探讨了Java中Integer类的缓存机制,详细解释了如何通过IntegerCache缓存-128至127之间的int类型,以减少对象创建,提高性能。此外,还介绍了如何通过JVM参数调整缓存大小,并对比了缓存内和缓存外对象的引用比较结果。

被折叠的 条评论
为什么被折叠?



