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)

相关推荐

  • python多继承构造方法(python类的继承)

    技术Jython中单继承和多继承的示例分析这篇文章主要介绍Jython中单继承和多继承的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Jython的继承类继承的能力是面向对象编程的基础。J

    攻略 2021年12月17日
  • 字段、复制字段、动态字段怎么使用

    技术Field、CopyField、DynamicField怎么使用这篇文章主要介绍“Field、CopyField、DynamicField怎么使用”,在日常操作中,相信很多人在Field、CopyField、Dyna

    攻略 2021年12月22日
  • SequoiaDB 2 . 8 . 4中显示的打开文件中的值是怎么来的?

    技术SequoiaDB v2.8.4显示的open files中的值怎么来的这篇文章主要介绍“SequoiaDB v2.8.4显示的open files中的值怎么来的”,在日常操作中,相信很多人在SequoiaDB v2

    攻略 2021年12月22日
  • 休的四字词语,休字在后面的成语有哪些

    技术休的四字词语,休字在后面的成语有哪些一字千金yī zì qiān jīn[释义]增损一字休的四字词语;赏以千金。形容文辞精妙;不可更改。[语出]南北朝·钟嵘《诗品·古诗》:“文温以丽;意悲而远;惊心动魄;可谓几乎一字

    生活 2021年10月29日
  • oracle12c中如何导入java的jar文件

    技术oracle12c中如何导入java的jar文件这篇文章主要介绍oracle12c中如何导入java的jar文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 1、

    攻略 2021年11月11日
  • Java的学习方法有哪些

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

    攻略 2021年11月6日