`

Integer类的缓存IntegerCache

    博客分类:
  • JAVA
 
阅读更多
public static void main(String[] args) {
        Integer i = 127;
        Integer j = 127;
        Integer ii = 128;
        Integer jj = 128;
        System.out.println(i==j);
        System.out.println(ii==jj);
}
结果
true
false

 

查看 Integer 源码

    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() {}
    }

 

分享到:
评论

相关推荐

    Integer类的缓存机制

    Integer类的缓存机制主要通过一个静态内部类IntegerCache实现。IntegerCache是一个数组,用于存储从-128到127(包括两端)的Integer对象。当调用`valueOf(int i)`时,会首先检查这个范围,如果在范围内,就直接从...

    Integer IntegerCache源码阅读

    `IntegerCache` 是一个内部私有静态类,它维护了一个缓存数组,用于存储-128到127之间的 `Integer` 对象。这个范围的选择是因为这些数值在Java虚拟机(JVM)中会被自动进行"装箱"(boxing)和"拆箱"(unboxing)操作...

    Java 9中如何对IntegerCache进行修改详解

    在Java 9中,Integer类内部包含了一个名为IntegerCache的静态内部类,它是一个私有的缓存,用于存储-128到127之间的Integer对象。这个缓存机制的存在是为了优化性能,因为在实际应用中,这个范围内的整数对象被频繁...

    Java包装类的缓存机制原理实例详解

    IntegerCache 是一个私有的静态类,它维护着一个缓存数组,该数组存储了从 -128 到 127 之间的所有 Integer 对象。 在 IntegerCache 中,cache 数组的大小是通过 IntegerCache.high 和 IntegerCache.low 来计算的。...

    java中Integer包装类装箱的一个细节详解

    IntegerCache是Integer类的一个私有静态内部类,它维护了一个-128到127的Integer对象数组。这个缓存大小可以通过JVM的启动参数`-Djava.lang.Integer.IntegerCache.high`来调整。默认值是127,但可以通过设置这个参数...

    src02 Integer

    9. **IntegerCache [Inner Class]**: `IntegerCache`是`Integer`类内部的一个缓存类,用于存储-128到127之间的`Integer`对象。这个缓存机制是为了提高性能,因为这些值经常被使用且重复创建是不必要的。 10. **...

    Java 基础.pdf_电子版pdf版

    在Java 8中,Integer缓存池的大小默认为-128到127,这个范围可以通过系统属性"java.lang.Integer.IntegerCache.high"进行调整。 ```java public static Integer valueOf(int i) { if (i &gt;= IntegerCache.low && i ...

    Spring Cache手动清理Redis缓存

    int clearCache(@Param("id") Long id, @Param("start") Long start, @Param("type") Integer type) throws DataAccessException; ``` 在上面的代码中,我们使用了Mybatis的@CacheEvict注解来实现缓存的清理。这个...

    更简单的Java缓存框架 jscache.docx

    ### 更简单的Java缓存框架 jscache #### 知识点概述 jscache是一个轻量级、易用的Java缓存框架,它基于面向切面编程(AOP)原理实现,支持灵活配置缓存策略,并提供了多种缓存实现方式。通过使用jscache,开发者...

    echache缓存注解说明文档

    `@Cacheable`可以应用于方法或类,若标记在类上,则类的所有方法都将启用缓存。当一个方法被调用并返回结果后,Spring会将结果以键值对的形式存储在缓存中。缓存的键和值分别由`key`和`value`属性决定。 - **...

    Java Integer.ValueOf()的一些了解

    从源码中我们可以看到,IntegerCache是一个静态内部类,它在类加载的时候就会创建并保存从-128到127的整数值的缓存对象,并将他们的引用保存在cache数组中。 现在,让我们来分析一下Integer.ValueOf()方法的使用...

    配置EhCache二级缓存

    4. **实体类映射文件中启用二级缓存**:在实体类的映射文件中,通过`&lt;cache&gt;`元素指定使用二级缓存的策略。例如: ```xml &lt;cache usage="read-only"/&gt; &lt;id name="id" type="integer" column="id"&gt; ...

    55丨享元模式(下):剖析享元模式在JavaInteger、String中的应用1

    这是因为Integer类内部有一个缓存池,即IntegerCache,它预先创建了-128到127之间的所有Integer对象。当我们调用valueOf()方法时,如果值在这个范围内,就会从缓存池中获取对象,而不是每次都new一个新的对象。例如...

    swift-以模型进行驱动数据缓存

    let sql = "CREATE TABLE IF NOT EXISTS CacheTable (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, content TEXT)" db.executeUpdate(sql, error: nil) } ``` 接下来,我们定义一个缓存服务类,它将负责...

    JAVA中Integer值的范围实例代码

    现在,让我们来看一看 `IntegerCache` 类: ```java private static class IntegerCache { private IntegerCache(){} static final Integer cache[] = new Integer[-(-128) + 127 + 1]; static { for(int i = 0...

    面试中很多人走过的坑,看完让你知道Integer和Int

    IntegerCache是Integer类的一个内部静态类,它维护了一个Integer对象的数组,用于存放-128到127的Integer实例。 ```java public static Integer valueOf(int i) { assert IntegerCache.high &gt;= 127; if (i &gt;= ...

    多级缓存.pdf

    private final Cache, Integer&gt; stockCache; public ProductCacheService() { this.productCache = Caffeine.newBuilder() .maximumSize(1) .build(); this.stockCache = Caffeine.newBuilder() .maximum...

    Hibernate 缓存

    Hibernate提供了两级缓存,分别是:一级缓存和二级缓存,以及一种特殊的QueryCache。 1. 一级缓存(Session级缓存) 一级缓存在Hibernate中被称为Session缓存,它位于每个Session的范围内。当我们在Session中对对象...

    28.java基本类型封装.docx

    `Integer`类中的常量池实现主要依赖于`IntegerCache`类。`IntegerCache`是一个静态内部类,它默认创建了一个包含-128到127之间的所有整数对象的数组`cache`。当`valueOf`方法接收到的参数在这个范围内时,它会直接...

Global site tag (gtag.js) - Google Analytics