关于int和Integer缓存(二):修改缓存大小

续上文:

java中的基础数据类型长度是否取决于操作系统?

在一些语言中,数据类型的长度是和操作系统有关系的,比如c和c++;

但是在java中,java的基础类型长度都是固定的,都是4个字节。
因为java不是直接运行在本地操作系统上的,而是运行在JVM上的,JVMJ保证class文件在不同的操作系统上稳定;这也是java跨平台的一点。


首先查看我的java version:


发现以及是server版的了,是混合模式(关于混合模式理解,可以查看):


Integer默认的是[-128, 127]的缓存范围,之前我们查看源码的时候也发现了,其中的low的下限是最开始的时候就固定死了的 final int low = -128;
而其中的high虽然是设置了final int的,但是最初的时候,是还没有赋值的所以我们可以通过设置java 的时候的参数来配置运行时的参数:

java -D java.lang.Integer.IntegerCache.high=1000 TestAutoBoxCache

java -XX:AutoBoxCacheMax=1000 TestAutoBoxCache 

其中都可以跟上 -server参数,也可以不跟!(因为我默认的是server版的jdk)


其中我的测试代码:

/**
 * 测试Integer的缓存上限修改:
 * (不过请注意:一旦你修改了缓存上限,都存到了常量池中,加大了内存的负担)
 * gc是没有办法回收的!!AutoBoxCacheMax
 * 
 * @author mzy
 *
 */
public class TestAutoBoxCache {  
    public static void main(String[] args) {  
	Integer a = 127;  
        Integer b = 127;  
        System.out.println(a == b);
		
	Integer c = 128;  
        Integer d = 128;  
        System.out.println(c == d);
		
        Integer e = 1000;  
        Integer f = 1000;  
        System.out.println(e == f);  
          
        Integer g = 1001;  
        Integer h = 1001;  
        System.out.println(g == h);  
          
        Integer i = 20000;  
        Integer j = 20000;  
        System.out.println(i == j);  
    }  
}  

运行结果,运行测试,(以下是在命令行中测试,也可以在IDE中进行,如eclipse中配置run as->run congratulations->arguments):



运行上面的代码,参数不同,结果不同:




参考,感谢!

http://rednaxelafx.iteye.com/blog/680746
http://www.iteye.com/topic/857587
https://blog.csdn.net/wang0112233/article/details/78641951


猜你喜欢

转载自blog.csdn.net/qq_36791569/article/details/80438292