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

news/2024/12/21 9:41:46/

回答重点

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

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

原理:

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

缓存池的使用场景:

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

扩展知识

缓存池的可配置范围

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

比如:

java">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.ppmy.cn/news/1556893.html

相关文章

如何利用大模型将语音转文字

如何利用大模型将语音转文字 OpenAI支持将语音转文字,调用接口可以直接将语音文件转为文字。 这个例子是调用了一个私有部署的Belle-whisper-large-v2-zh,使用OpenAI的客户端。 测试代码如下: from openai import OpenAIclient OpenAI(ba…

OpenEuler 22.03 安装 flink-1.17.2 集群

零:规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器,用于搭建 flink 集群。这里使用flink1.17.2 的原因,是便于后续与springboot的整合 服务器名IP地址作用其他应用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.…

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…

RCNN系列是如何逐步改善的

1、R-CNN的缺点&#xff1a; 1&#xff09;计算效率低下&#xff1a;RCNN需要为每一个候选框都提取特征&#xff0c;会导致大量重复的工作&#xff0c;因为候选框是原始图片的一部分&#xff0c;肯定是存在交集的。2&#xff09;需要大量的磁盘空间&#xff1a;在训练阶段&…

基于Spring Boot的雅苑小区管理系统

一、系统背景与意义 随着信息化技术的快速发展&#xff0c;传统的小区物业管理方式已经难以满足现代居民对于高效、便捷服务的需求。因此&#xff0c;开发一款基于Spring Boot的小区管理系统显得尤为重要。该系统旨在通过信息化手段&#xff0c;实现小区物业管理的智能化、自动…

麒麟操作系统服务架构保姆级教程(三)NGINX中间件

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 想要在网页上访问到代码那么就需要用到应用服务类中间件&#xff0c;国外的有Nginx&#xff0c;Tomcat等&#xff0c;国内的有金蝶web&#xff0c;东方通的服务中间件&#xff08;Tongweb&#xff0…

Docker基础命令实战

问题&#xff1a;Error response from daemon: Get "https://index.docker.io/v1/search?qmysql&n25": dial tcp 199.59.148.9:443: connect: connection refused 在pull nginx时出现的报错&#xff0c;可能原因是镜像源过期了&#xff0c;我们需要更换镜像源 …

初学stm32 --- PWM输出

目录 STM32 PWM工作过程​编辑 STM32 PWM工作过程&#xff08;通道1为例&#xff09; PWM模式1 & PWM模式2 向上计数配置说明​编辑 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 ​编辑 PWM输出相关库函数 输出比较初始化函数&#xff1a; 设置比较值函数&a…