美文网首页
Integer.IntegerCache 缓存问题总结

Integer.IntegerCache 缓存问题总结

作者: everlaa | 来源:发表于2018-01-25 10:10 被阅读0次
抛出问题,先上代码: image.png 执行结果: image.png

为何一个是 true,一个是 false,不是完全一样?

根据Java编译机制, .java文件在编译以后会生成.class文件供JVM加载执行,那么我们先到.class文件中看看是否能解释以上原因。

如何找到对应的.class文件?我的项目是maven项目,故编译后可以到项目根目录的 target 目录下找到对应 .class文件。 image.png 打开文件(idea自带的反编译工具): image.png

有几处不同:

  • 首先编译器为我们的类自动添加了一个 无参构造函数
  • 其次 main 入口处也有两处不同,一个是 格式化代码,另一个是 Integer类型的 引用指向 被Integer.valueOf()改变。

查看valueOf源码:

image.png

我们发现,Integer 类的作者在编写该类时,为避免重复创建对象,对 Integer 部分值的实例做了缓存,如果创建的值在 low 和 high 范围内,直接从 IntegerCache中取出缓存好的对象,否则 new 一个新的 Integer对象返回。下面看一下IntegerCache这个类,该类是 Integer 类的私有静态内部类

image.png

该类位于 Integer.java 内部,该类会在 static 代码块初始化时加载JVM的配置,如果能够加载到对应的值就使用配置值,否则用默认的 -128到 127的范围初始化缓存数组。

现在回过头来看一开始的代码: image.png
结论:
  • (来自方法注释) This method will always cache values in the range -128 to 127, inclusive, and may cache other values outside of this range.
  • (来自方法注释) If a new Integer instance is not required, this method should generally be used in preference to the constructor, as this method is likely to yield significantly better space and time performance by caching frequently requested values.
  • 在比较Integer对象的值时,不要使用“==”,一定要使用 equals()。
原文作者:清浅池塘
原文链接:https://zhuanlan.zhihu.com/p/27562748

相关文章

  • Integer.IntegerCache 缓存问题总结

    为何一个是 true,一个是 false,不是完全一样? 根据Java编译机制, .java文件在编译以后会生成....

  • 缓存问题总结

    1)缓存穿透故意查询在cache和db中根本都不存在的数据。如果非法key的数量不多,可以缓存null。如果很多的...

  • Redis总结

    一、数据类型 二、使用场景 二、redis缓存使用总结 三、redis缓存常见问题 四、布隆过滤器的方式解决缓存穿透问题

  • Redis缓存相关问题总结

    使用缓存是系统性能优化的第一黄金法则。 缓存的设计和使用对一个系统的性能至关重要,平时接触到项目无论多少也都会在某...

  • WebView加载缓存问题总结

    1.兼容性问题 4.4包括以下版本WebView内核不同导致,各种问题。这里解决的方式是使用腾讯TBS浏览器服务,...

  • 你的系统是怎样支持高并发的?-多级缓存架构

    ​ 目录 ① 多级缓存使用场景 ② 多级缓存读写逻辑 ③缓存预热 ④总结 1 多级缓存使用场景 多级缓存适合用在对...

  • 缓存(Redis)面试问题总结

    一、 二八定律 网站访问数据的特点大多数呈现在"二八定律":80%的业务访问集中在20%的数据上。这时为了减轻数据...

  • 业务分析:HR端职位编辑薪资计算逻辑和错误分析

    1. 问题总结 未发布类型的职位详情中,会将职位信息缓存到浏览器。数据缓存和获取都需要特殊金额转化,经测试发现,处...

  • 阿里老司机教你微服务化后缓存怎么做

    摘要 最近接手的代码中遇到几个缓存的问题,存在一些设计原则的问题,这里总结一下,希望可以对你有帮助 问题 问题1:...

  • 浏览器 http 缓存机制总结

    浏览器 http 缓存机制总结 http 报文头信息控制缓存介绍 Expires ​ 指的是缓存过期的时间,超...

网友评论

      本文标题:Integer.IntegerCache 缓存问题总结

      本文链接:https://www.haomeiwen.com/subject/liimaxtx.html