码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Integer缓存策略


    先看一段代码

    1. @Test
    2. void contextLoads() {
    3. Integer a=10;
    4. Integer b=10;
    5. System.out.println(a==b); //true
    6. Integer c=1000;
    7. Integer d=1000;
    8. System.out.println(c==d); //false
    9. System.out.println(c.equals(d)); //true
    10. }

    对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false。

    当值在 -128 ~ 127之间时,java会进行自动装箱,然后会对值进行缓存,如果下次再有相同的值,会直接在缓存中取出使用。缓存是通过Integer的内部类IntegerCache来完成的。当值超出此范围,会在堆中new出一个对象来存储。

     

     给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf()。

    我们也可以注意到在源码中,IntegerCache的low和high虽然都是final修饰的,但是final没有赋初值,也就是我们可以去自定义的。

    在 jdk 1.8 所有的数值类缓冲池中,Integer 的缓冲池 IntegerCache 很特殊,这个缓冲池的下界是 - 128,上界默认是 127,但是这个上界是可调的,在启动 jvm 的时候,通过

    -XX:AutoBoxCacheMax=   来指定这个缓冲池的大小,该选项在 JVM 初始化的时候会设定一个名为 java.lang.IntegerCache.high 系统属性,然后 IntegerCache 初始化的时候就会读取该系统属性来决定上界

    Idea2021.3.2 设置项目运行参数配置_hnjcxy的博客-CSDN博客_idea添加运行配置

    而包装类并不是都有缓存的,例如Double和Float就没有

    Java中基本数据类型byte、short、char、int、long、float、double、boolean有对应的封装类型:Byte、Short、Character、Integer、long、Float、Double,Boolean其中Byte、Short、Character、Integer、Long、Boolean都实现了常量池缓存。Byte、Short、Character、Integer、Long通过静态内部Cache类来实现一定范围(下面列出缓存范围)内的数据缓存,而Boolean通过两个静态常量TRUE、FALSE来实现数据缓存。

    • Byte类缓存范围:[-128,127] 共256个值。
    • Short类缓存范围:[-128,127] 共256个值。
    • Character类缓存范围:[0,127] 共128个值。
    • Integer类默认缓存范围:[-128,127] 共256个值,可以通过修改VM参数-XX:AutoBoxCacheMax=200 即可修改缓存上限到200
    • Long类缓存范围:[-128,127] 共256个值。
    • Boolean类就缓存两个值:true、false。

    具体内容请参考:解释一下自动装箱和自动拆箱?_学习使我可乐的博客-CSDN博客_自动装箱和自动拆箱

  • 相关阅读:
    安全狗核心产品入选《云原生产品目录》云原生安全实力备受认可!
    java使用数据库连接池
    IIC总线概述和通信时序代码详细图文解析
    k8s相关的概念
    C语言-- 用队列实现栈的功能
    Leetcode22-有效括号生成详解
    编程老手如何在autojs和冰狐智能辅助之间选择?
    Elasticsearch:在 Elastic 中访问机器学习模型
    Himall商城-公共方法
    JAVA服务器端发送邮件问题:Could not connect to SMTP host: smtp.qq.com, port: 465
  • 原文地址:https://blog.csdn.net/m0_46845579/article/details/126191561
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号