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)

相关推荐

  • VTK中常用控件介绍及如何实现圆锥体绘制

    技术VTK中常用控件介绍及如何实现圆锥体绘制VTK中常用控件介绍及如何实现圆锥体绘制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。利用 VT

    攻略 2021年11月15日
  • gps是什么意思,导航和GPS有什么区别

    技术gps是什么意思,导航和GPS有什么区别GPS(Global Positioning System)即全球卫星定位系统,从1973年发展到2009年36年间,实际意义早已超过设计之初的定义。现在,GPS不仅仅为移动目

    生活 2021年10月28日
  • Steam游戏代理加速服务器首选香港服务器香港主机

    技术Steam游戏代理加速服务器首选香港服务器香港主机随着很多游戏的火爆,现在玩Steam国际服的玩家越来越多,虽然也有很多游戏加速器提供此类网络优化服务,但是如果不充值昂贵的VIP会员的话根本无法满足用户的需求,此外由

    礼包 2021年10月19日
  • MYSQL中COLLATE有什么用

    技术MYSQL中COLLATE有什么用这篇文章给大家分享的是有关MYSQL中COLLATE有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 MYSQL中的CO

    攻略 2021年10月27日
  • 113. 路径总和 II

    技术113. 路径总和 II 113. 路径总和 II113. 路径总和 II
    题目链接:113. 路径总和 II(中等)
    给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有

    礼包 2021年12月10日
  • Redis中怎么实现分布式锁

    技术Redis中怎么实现分布式锁本篇内容介绍了“Redis中怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

    2021年10月20日