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)

相关推荐

  • 怎么搭建Mac Laravel docker sail

    技术怎么搭建Mac Laravel docker sail本篇内容介绍了“怎么搭建Mac Laravel docker sail”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一

    攻略 2021年11月16日
  • pl什么意思,JM们,我到底PL了没啊?

    技术pl什么意思,JM们,我到底PL了没啊?我10月份做的造影,当时是备孕十一个月都没有好孕,去医院做了所有检查,除了造影,以前听说造影痛苦一直不敢做,医生也不建议我做,说是备孕时间短,后来等所有检查结果出来一切都没问题

    生活 2021年10月27日
  • 如何用F#库天棚测试UI

    技术如何利用F#库canopy进行UI测试这篇文章将为大家详细讲解有关如何利用F#库canopy进行UI测试,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。InfoQ:你能否为我们介绍一

    攻略 2021年12月16日
  • 怎么解决Dubbo服务限制大数据传输抛Data length too large: 13055248问题

    技术怎么解决Dubbo服务限制大数据传输抛Data length too large: 13055248问题这篇文章主要讲解了“怎么解决Dubbo服务限制大数据传输抛Data length too large: 1305

    攻略 2021年11月16日
  • 刘羽冲偶得古兵书翻译,刘羽冲偶得古兵书 赏析

    技术刘羽冲偶得古兵书翻译,刘羽冲偶得古兵书 赏析看看刘羽冲的表现:他偶然得过一部古兵书,苦读了一年左右,自己感觉可以统领十万军兵冲锋陷阵了刘羽冲偶得古兵书翻译。正巧当时乡里出现土匪,刘羽冲就自己训练乡兵与土匪们打仗,

    生活 2021年10月29日
  • HBase如何实现保存异步

    技术HBase如何实现保存异步这篇文章主要介绍HBase如何实现保存异步,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 批量操作 如何提交任务?不管是单条数据 还是 批量数据 都是异步执行2 批

    攻略 2021年12月8日