zoukankan      html  css  js  c++  java
  • Integer.valueOf

    一. 深入代码
     
    在创建数字 1 的对象时, 大多数人会使用 new Integer(1), 而使用 Integer.valueOf(1) 可以使用系统缓存,既减少可能的内存占用,也省去了频繁创建对象的开销。 

    系统默认只缓存 -128~127 之间的整数。下面我们看一下 Integer.valueOf(int) 方法的代码: 

    1 public static Integer valueOf(int i) {  
    2     assert IntegerCache.high >= 127;  
    3     if (i >= IntegerCache.low && i <= IntegerCache.high)  
    4         return IntegerCache.cache[i + (-IntegerCache.low)];  
    5     return new Integer(i);  
    6 }  
    注意到核心 IntegerCache.cache[i + (-IntegerCache.low)], 观察 IntegerCache 类的源码实现:
    为 -128 ~ 127 数值提供自动装箱的缓存服务。  
     1 private static class IntegerCache {  
     2     static final int low = -128;  
     3     static final int high;  
     4     static final Integer cache[];  
     5   
     6     static {  
     7         // high value may be configured by property  
     8         int h = 127;  
     9         String integerCacheHighPropValue =  
    10             sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");  
    11         if (integerCacheHighPropValue != null) {  
    12             int i = parseInt(integerCacheHighPropValue);  
    13             i = Math.max(i, 127);  
    14             // Maximum array size is Integer.MAX_VALUE  
    15             h = Math.min(i, Integer.MAX_VALUE - (-low) -1);  
    16         }  
    17         high = h;  
    18   
    19         cache = new Integer[(high - low) + 1];  
    20         int j = low;  
    21         for(int k = 0; k < cache.length; k++)  
    22             cache[k] = new Integer(j++);  
    23     }  
    24   
    25     private IntegerCache() {}  
    26 }  
    static 静态代码块可知缓存的初始化是在第一次使用的时候。 通过 VM 参数-XX:AutoBoxCacheMax=<size> 可以配置缓存的最大值。 在 VM 初始化期间, 缓存最大值 high, 可能被保存在 sun.misc.VM class 的私有系统属性里。      
     
     
    三. 总结
     
    除非是 JDK 1.5 以前的环境, 如果系统不需要新对象, 则推荐使用 Long, Integer, Short, Character, Byte 的 valueOf() 方法提升性能。 
  • 相关阅读:
    配置Express中间件
    C#字符串中特殊字符的转义
    JSON.NET 简单的使用
    ASP.NET 解决URL中文乱码的解决
    ASP.NET MVC 笔记
    VS中一些不常用的快捷键
    Visual Studio 中突出显示的引用
    Silverlight从客户端上传文件到服务器
    silverlight打开和保存文件
    sliverlight资源文件的URI调用
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/7131034.html
Copyright © 2011-2022 走看看