包装类型的缓存机制
包装类型的缓存机制
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。
Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 TRUE or FALSE。
对于 Integer,可以通过 JVM 参数 -XX:AutoBoxCacheMax=<size> 修改缓存上限,但不能修改下限 -128。实际使用时,并不建议设置过大的值,避免浪费内存,甚至是 OOM。
对于Byte,Short,Long ,Character 没有类似 -XX:AutoBoxCacheMax 参数可以修改,因此缓存范围是固定的,无法通过 JVM 参数调整。Boolean 则直接返回预定义的 TRUE 和 FALSE 实例,没有缓存范围的概念。
Integer 缓存源码:
1 | |
示例:
1 | |
a和b指向同一对象,==为true。c和d超出缓存范围,各自 new 了对象,==为false。
包装类型缓存机制 ⇒小范围的数值对象被预先创建并复用。
这样做节省内存和提高效率,但比较时仍推荐使用equals(),以避免因缓存范围不同带来的“==”误判。
包装类型的缓存机制
https://hxxyy.info/2025/09/23/包装类型的缓存机制/