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)

相关推荐

  • 怎么理解TiDB兼容MySQL参数优化

    技术怎么理解TiDB兼容MySQL参数优化本篇内容介绍了“怎么理解TiDB兼容MySQL参数优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年11月8日
  • C#如何实现基于Socket套接字的网络通信封装

    技术C#如何实现基于Socket套接字的网络通信封装小编给大家分享一下C#如何实现基于Socket套接字的网络通信封装,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让

    攻略 2021年11月26日
  • MHA在线切换脚本master_ip_online_change如何结合VIP

    技术MHA在线切换脚本master_ip_online_change如何结合VIP这篇文章主要介绍MHA在线切换脚本master_ip_online_change如何结合VIP,文中介绍的非常详细,具有一定的参考价值,感

    攻略 2021年11月23日
  • 【上接 9 年前的一篇文章】动态创建控件的一个坑和解决方案

    技术【上接 9 年前的一篇文章】动态创建控件的一个坑和解决方案 【上接 9 年前的一篇文章】动态创建控件的一个坑和解决方案提出问题
    昨天一位网友提出了这么一个问题:动态创建Disabled的文本输入框,

    礼包 2021年11月1日
  • dna聚合酶作用部位,DNA聚合酶作用于什么位置

    技术dna聚合酶作用部位,DNA聚合酶作用于什么位置DNA聚合酶作用部位是磷酸二酯键。1、聚合作用:在引物RNA-OH末端dna聚合酶作用部位,以dNTP为底物,按模板DNA上的指令,即A与T,C与G的配对原则,逐步逐个

    生活 2021年10月23日
  • JVM堆内存溢出后其他线程是否可继续工作

    技术JVM堆内存溢出后其他线程是否可继续工作本篇文章给大家分享的是有关JVM堆内存溢出后其他线程是否可继续工作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

    2021年10月23日