当前位置: 首页 > article >正文

【Java基础面试题025】什么是Java的Integer缓存池?

回答重点

Java的Integer缓存池(Integer Cache)是为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围,因此缓存这些对象可以减少内存分配和垃圾回收的负担,提升性能

在 -128到127范围内的Integer对象会被缓存和复用

原理:

  • Java在自动装箱时,对于值范围在-128 - 127之中的int类型,会直接返回一个已经缓存的Integer对象,而不是创建新的对象

缓存池的使用场景:

  • 自动装箱(Auto-boxing):当基本类型int转换为包装类Integer时,若数值在缓存范围内,返回缓存对象,而不是创建新对象
  • 值比较:由于相同范围内的整数使用同一个缓存对象,使用==可以正确比较它们的地址(引用相同),而不需要使用equals()。但是要注意对于超过缓存范围的Integer对象,==比较的是两个不同的对象地址。

扩展知识

缓存池的可配置范围

在Java8及以后的版本中,可以通过JVM参数 -XX:AutoBoxCacheMax=size 来调整缓存池的上限

比如:

java -XX:AutoBoxCacheMax=500

这样可以将缓存范围扩展到-128 - 500

缓存池实现原理分析

实现的原理是int在自动装箱的时候会调用Integer.valueOf(),进而用到了IntegerCache。

IntegerCache的底层实现,就是判断下值是否在范围之内,如果是的话去IntegerCache中取

IntegerCache在静态块中会初始化好缓存值

不仅Integer有缓存池,Long也是有的,不过范围是写死的 -128 到 127(无法配置)

  • Long、Short、Byte这三种包装类缓存范围也是-128到127的
  • Float和Double没有缓存池,因为是小数,能存的数太多了
  • Character缓存范围是\u0000到\u007F(即0到127,代表ASCII字符集)
  • Boolean只缓存两个值,即true和false


http://www.kler.cn/a/445442.html

相关文章:

  • linux java 查看异常堆栈
  • 单点登录平台Casdoor搭建与使用,集成gitlab同步创建删除账号
  • 数据压缩比 38.65%,TDengine 重塑 3H1 的存储与性能
  • ios 混合开发应用白屏问题
  • 【异常】GL-SFT1200路由器中继模式,TL-CPE1300D无法搜寻5G网问题分析
  • Zabbix6.0升级为6.4
  • C++ 字符串(string)使用
  • Unity-Editor扩展GUI基本实现一个可拖拉放的格子列表
  • 32单片机串口数据接收、空闲IDLE中断详解
  • 【渗透技术总结】SQL手工注入总结
  • SQL进阶技巧:如何根据工业制程参数计算良品率?
  • 【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。
  • hadoop技术栈的基本启停命令
  • C05S12-MySQL数据库事务
  • Day9 神经网络的偏导数基础
  • bacnet4j-5.0.2.jar资源
  • AI加持,如何让PPT像开挂一键生成?
  • 前端开发 详解 Node. js 都有哪些全局对象?
  • C# OpenCV机器视觉:图像分割(让照片中的物体各自“安家”!)
  • WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)
  • 谷歌发布最强量子芯片Willow
  • 【数理统计】参数估计
  • UE5 做简单的风景观光视频
  • VSCode常见报错:unins000.exe
  • 智驭时空 聚势未来│视频孪生产品技术交流会深圳专场隆重举行
  • 贝叶斯分类器(Naive Bayes)