首页 > 其他分享 >基本数据类型缓存池

基本数据类型缓存池

时间:2024-07-14 12:20:09浏览次数:11  
标签:基本 缓存 int 数据类型 static 127 128 Integer

  • 基本数据类型的包装类除了 Float 和 Double 之外,其他六个包装器类(Byte、Short、Integer、Long、Character、Boolean)都有常量缓存池。

    • Byte:-128~127,也就是所有的 byte 值

    • Short:-128~127

    • Long:-128~127

    • Character:\u0000 - \u007F

    • Boolean:true 和 false

    • Integer:-128~127

public static void main(String[] args) {
    // 每次都会新建一个对象
    Integer a = new Integer(11);
    Integer b = new Integer(11);
    // false
    System.out.println(a == b);

    // 使⽤用缓存池中的对象,多次调用只会取同⼀一个对象的引用
    Integer c = Integer.valueOf(11);
    Integer d = Integer.valueOf(11);
    // true
    System.out.println(c == d);

    // 128超出Integer的常量池范围-128~127
    Integer e = Integer.valueOf(128);
    Integer f = Integer.valueOf(128);
    // false
    System.out.println(e == f);
}
  • 如果使用 new Integer() 创建对象,即使值在 -128 到 127 范围内,也不会被缓存,每次都会创建新的对象。因此,推荐使用 Integer.valueOf() 方法获取整数对象。
  • Integer源码
public static Integer valueOf(int i) {
    // 检查该整数是否在 IntegerCache 中,如果在,则返回缓存中的对象
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    // 否则创建一个新的对象并缓存起来
    return new Integer(i);
}
// 内部类
private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;

        cache = new Integer[(high - low) + 1];
        int j = low;
        // 往缓冲池填数据备用
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);

        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
    }

    private IntegerCache() {}
}
  • JVM 启动的时候,通过 -XX:AutoBoxCacheMax=NNN 来设置缓存池的大小,最大到 Integer.MAX_VALUE -129

标签:基本,缓存,int,数据类型,static,127,128,Integer
From: https://www.cnblogs.com/sprinining/p/18301341

相关文章

  • 衡庐浅析·C语言程序设计·第三章·三种基本结构之顺序结构
        本文适用于大学的期中期末考试、专升本(专接本、专插本)考试、408等考研预科。如有相关题目疑问或建议欢迎在评论区进行互动。    转载请标明出处。在介绍C的三种基本结构之前,我们首先来逐字逐句的解析一些代码语句,以便更好地上手并学习接下来的内容。此处......
  • Java基础教程秘籍-2章_基本语法上
    ......
  • 数据库的基本查询语法:
    一.数据库的基本数据类型:int    整数类型double 小数类型decimal 指定整数与小数长度的小数类型范围在-99.99-99.99date    日期类型格式为:yyyy-MM-dd包含年月日不包含分秒datetime 日期类型格式:YYYY-MM-DDHH:MM:SS,包含年月日包含时分秒timestam......
  • 【Android面试八股文】谈谈你对Glide框架的缓存机制设计的理解
    文章目录一、引入缓存的目的二、Glide缓存流程2.1Glide缓存的读取顺序2.2Glide加载资源流程2.3Glide的缓存分层结构三、内存缓存原理四、存取原理4.1取数据4.2存数据4.3为什么要引入软引用?五、磁盘缓存原理(DiskLruCache)5.1磁盘缓存概述5.......
  • 41种常用元素的基本信息
    元素分子化学式原子序数、核外电子数、质子数相对原子质量相对分子质量、分子量、摩尔质量氢\(H_2\)$1$$1$$2$氦\(He\)$2$$4$$4$锂\(Li\)$3$$7$$7$铍\(Be\)$4$$9$$9$硼$B$$5$$11$$11$碳$C$$6$$12$......
  • Redis:高性能的开源缓存数据库
    简介:Redis(RemoteDictionaryServer)是一个基于内存的开源缓存数据库,常用于缓存、消息队列、分布式锁等场景。它被设计成快速、可靠且易于使用的数据库系统,具有高性能、高可用、可扩展性等特点。本篇博客将介绍Redis的基本原理、常见应用场景以及优势。Redis的基本原理Redis......
  • java 基本语法1
    1.安装idea,java编译器,编译器会自动对代码进行编译,然后运行得到结果.idea分为社区版(免费),企业版(收费),https://www.jetbrains.com/zh-cn/idea/download/?section=windows从官网下载对应版本安装即可.2.java的数据类型有四类八项.整数,小数,字符,布尔.其中整数:intlongbyt......
  • 知识图谱数据库基本知识
    文章目录知识图谱数据模型知识图谱查询语言    随着知识图谱规模的日益增长,数据管理愈加重要。一方面,以文件形式保存的知识图谱显然无法满足用户的查询、检索、推理、分析及各种应用需求;另一方面,传统数据库的关系模型与知识图谱的图模型之间存在显著差异,关......
  • 《JavaSE》------4.<基础语法(数据类型与变量)>
    包含java注释,标识符,关键字,数据类型与变量,Ascii码与Unicode码,类型转换....语言只是工具,不能决定你好不好找工作,决定你好不好找工作的是你的能力!!!!!学历本科及以上就够用了!!!!!!!!!!!!!!!!!!!!!!!!!!!!目录一、注释二、标识符三、关键字四、数据类型与变量4.1字面常量4.1.1字面常量的分类4.2数据......
  • python——数据类型及常用操作
    1.Intint是一种基本的数据类型,可以存储任意大小的整数,定义简单,将一个值赋给变量即可可以和+-*/等运算符结合a=2b=3c=a+bprint(c)d=b-apint(d)e=a*bprint(e)fa/bprint(f)a=2print(a)2.Floatfloat表示浮点数 也就是我们常说的带有小数......