int和Integer缓存的实现是怎样的

技术int和Integer缓存的实现是怎样的今天就跟大家聊聊有关int和Integer缓存的实现是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。int相信我

今天跟大家聊聊int和Integer缓存的实现,可能很多人都不太懂。为了让大家更好的了解,边肖为大家总结了以下内容,希望大家能从这篇文章中有所收获。

我相信我们都熟悉int。Java中的原始数据类型包括长、短、浮点、双精度、字符、字节和布尔。原始数据类型不是对象。

Integer是int对应的包装类,其中有一个私有的最终int值;来存储数据,并且还提供了一些基本的操作,比如sum、max、int和string的转换。从声明值为private final,我们可以知道它也是一个不可变的类型!

Java5中引入了自动打包和解包功能,即Java可以根据上下文自动将int转换为Integer或Integer转换为int。自动打包和解包其实是一种语法糖(语法糖是对已有语法的封装,主要是为了方便程序员开发,提高开发效率)。

它发生在编译阶段,javac帮助我们自动打包和拆箱。具体来说,它调用Integer.valueOf方法进行打包,调用Integer.intValue方法进行解包。让我们反编译看看是否是这样,比如下面的代码

int和Integer缓存的实现是怎样的

反编译结果,没错!

int和Integer缓存的实现是怎样的

让我们再来谈谈这个方法的价值。构建Integer对象的传统方法是直接调用新的构造函数。但是根据实践发现,大部分数据操作都集中在很小的值范围内,所以在Java5中引入了静态工厂方法valueOf。调用时,作为缓存的IntegerCache可以带来明显的性能提升。默认缓存值为-128到127。

这是什么意思?先看看源代码。

int和Integer缓存的实现是怎样的

如果没有修改默认的缓存值(-128到127),我们将执行Integer i=a值(注意不是直接新建Integer,直接新建不会使用缓存)。如果该值大于或等于-128且小于或等于127,则不会新建一个新的Integer对象,而是转到IntegerCache查找该缓存对象的引用并直接返回。这样可以直接缓存一些常用的值!消费减少!

如果您清楚地知道常用整数的值较大,则可以修改默认缓存值。

设置JVM-xx3360 autoboxcachemax=size修改缓存的最大值,但不修改最小值。

让我们看看英特尔高速缓存做了什么。

int和Integer缓存的实现是怎样的

很简单,只要得到一个Integer数组,在静态代码块中读取,看看我们是否设置了-XX:AutoBoxCacheMax=size,如果没有,就用默认的缓存值初始化缓存数组,在数组中放一个Integer。如果存在英特尔高速缓存高值,请修改最大高速缓存值,然后操作。

还有一点要注意:避免无意的打包和解包,尤其是在性能敏感的情况下,因为创建大量对象和大量整数的成本在内存和处理速度方面不是一个数量级。因此,在性能敏感的情况下,请尝试使用原始数据类型。

看完以上内容,你对int和Integer缓存的实现有更好的理解吗?如果您想了解更多知识或相关内容,请关注行业资讯频道,感谢您的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/113755.html

(0)

相关推荐

  • VBS如何批量重命名文件并且操作前备份原有文件

    技术VBS如何批量重命名文件并且操作前备份原有文件小编给大家分享一下VBS如何批量重命名文件并且操作前备份原有文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们

    攻略 2021年11月1日
  • 如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本

    技术如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本这篇文章给大家介绍如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助

    攻略 2021年11月29日
  • keil如何下载至单片机(keil5 hex文件怎么下载到单片机)

    技术KeilC51基础中如何生成可以下载到单片机的Hex文件KeilC51基础中如何生成可以下载到单片机的Hex文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个

    攻略 2021年12月24日
  • 10组-Alpha冲刺-总结

    技术10组-Alpha冲刺-总结 10组-Alpha冲刺-总结[组长博客链接](https://www.cnblogs.com/Jimase/p/15585897.html)# 一、基本情况## 现场答

    礼包 2021年11月22日
  • 如何理解Spring启动过程

    技术如何理解Spring启动过程这篇文章主要介绍“如何理解Spring启动过程”,在日常操作中,相信很多人在如何理解Spring启动过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理

    攻略 2021年10月20日
  • many比较级,many可以修饰比较级吗

    技术many比较级,many可以修饰比较级吗many可以修饰比较级。much可用于形容词、副词比较级之前many比较级,而many不能。如果many后修饰more,more代替或修饰可数名词复数时,前面只能用many,而

    生活 2021年10月24日