Java 基础 - 包装类valueOf()的缓存
总结
1-valueOf()缓存使用到设计模式:享元模式
单例模式和享元模式都是为了避免重复创建对象,但是其本质是不一样的:
- 其实现方式不一样,单例是一个类只有一个唯一的实例,而享元可以有多个实例,只是通过一个共享容器来存储不同的对象。
- 其使用场景不一样,
- 单例是强调减少实例化提升性能,因此一般用于一些需要频繁创建和销毁实例化对象或创建和销毁实例化对象非常消耗资源的类中,如连接池、线程池。
- 享元则是强调共享相同对象或对象属性,节约内存使用空间。
2-详细解释
规律:
- 通过自动装箱Integer i = 1 / Character c = 'p'、或者显示调用valueOf() ,如果在缓存中,就返回同一个对象
- 如果不在,就new一个新对象返回
1.Integer.valueOf缓存范围是[-128,127]
- 通过integer内部的private static class IntegerCache类的Integer cache[]来缓存
- 缓存的最小值,不能改变,只能是-128
- 缓存的最大值,可以通过-XX:AutoBoxCacheMax=<size>来改变。且只有大于127时,改变才有效;配置小于127无效。
2.Byte,Short,Long类型的缓存范围是[-128,127]
- 每个包装类都有各自的缓存类ByteCache, ShortCache, LongCache
- 缓存的上下限,不能改变
3.Character缓存[0,127]
- 缓存类是CharacterCache
- 缓存的上下限,不能改变
4.Double没有缓存,Double.valueOf()都是直接返回new Double (num);
5. Boolean缓存TRUE、FALSE, 并没有缓存类。
分类:
Java 基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?