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

Java中基本数据类型包装类的常量池缓存的值得范围是多少?

在Java中,基本数据类型对应的包装类(如IntegerLongByte等)使用了一种优化手段,称为常量池缓存(也称为缓存池或整数池)。这个缓存主要用于存储一定范围内的实例,以便快速重复利用这些对象,减少内存消耗。

对于Integer类,JDK 8及之前的版本中,这个范围是从-128127。这意味着当你请求一个在该范围内的Integer值时,JVM会从缓存中返回一个已经创建的实例,而不是每次都创建一个新的实例。这个范围是固定的,不能被修改。

从Java 9开始,由于永久代被移除,Integer的缓存实现发生了变化,但仍然存在类似的缓存机制。Java 9中,Integer的缓存范围默认从-128127,但这个范围可以通过JVM参数-XX:AutoBoxCacheMax=<size>进行调整。

其他包装类,如LongByteShort等,也有类似的缓存机制,但具体的缓存值范围可能不同,并且可能会受到JVM实现的影响。例如,在一些JVM实现中,Long的缓存范围可能会更广。

请注意,这个缓存机制仅适用于自动装箱(autoboxing)过程,即基本数据类型与包装类之间的自动转换。如果你显式地创建包装类的新实例,如使用new Integer(123),那么每次都会创建一个新的对象,而不会使用缓存中的实例。

Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or False。

如果我们使用的装箱的方式创建值为缓存范围内的对象,他会返回缓存区的对应的对象,比如Integer i = 10,就会返回缓存区中的对象,而Integer i = 1000就会在堆区创建对象。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux:账号和权限管理(二)
  • 掀起 .NET 风暴:用 Docker 快速打造并部署你的炫酷应用!
  • the request was rejected because no multipart boundary was found
  • FP8量化
  • 精益生产管理培训机构怎么选?三大维度助你精准定位
  • 从科幻到现实:AIGC助力打造个性化数字人
  • MySQL:先插入数据库,然后再查询
  • linux shell 函数
  • STM32控制机械臂与传感器:整合ESP32通讯、Spark与人工智能优化的智能制造解决方案(代码说明)
  • 机器学习第五章-神经网络
  • ubantu-elasticsearch
  • echarts横向柱状图
  • Vue3发送验证码,开启倒计时,并且倒计时结束前无法点击
  • 21LTR-Scene打靶渗透【附POC】(权限提升)
  • uniapp 多渠道打包实现方案
  • [NodeJS] 关于Buffer
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • codis proxy处理流程
  • create-react-app项目添加less配置
  • iOS 颜色设置看我就够了
  • Javascript基础之Array数组API
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js如何打印object对象
  • leetcode-27. Remove Element
  • leetcode386. Lexicographical Numbers
  • Linux中的硬链接与软链接
  • Python学习笔记 字符串拼接
  • Redis 中的布隆过滤器
  • RxJS: 简单入门
  • Spring声明式事务管理之一:五大属性分析
  • ------- 计算机网络基础
  • 利用DataURL技术在网页上显示图片
  • mysql面试题分组并合并列
  • ######## golang各章节终篇索引 ########
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (003)SlickEdit Unity的补全
  • (1)svelte 教程:hello world
  • (javaweb)Http协议
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)计算机毕业设计高校学生选课系统
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)js前端开发中设计模式之工厂方法模式
  • (四)进入MySQL 【事务】
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)Google Chrome调试JS
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .bat批处理出现中文乱码的情况
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...