java整数缓存 修改_关于int和Integer缓存(二):修改缓存大小

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

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

但是在java中,java的基础类型长度都是固定的,都是4个字节。

因为java不是直接运行在本地操作系统上的,而是运行在JVM上的,JVMJ保证class文件在不同的操作系统上稳定;这也是java跨平台的一点。

首先查看我的java version:

47d7683eb42500165253dfaca0e14137.png

8a738a36b257b043511290e6269447c5.png

发现以及是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):

ebbfa1f5864e98f2d98a8b370af731a9.png

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

03dc69ca37a1dd3fc1f8da16c38a7d29.png

030b5791378e9dd4e062a91e5f5146a5.png

ba87532f8b05fd65a04ab295caa8384a.png

247b64645bbbd6a94515c22bded11559.png

cb2e82e4f29c7e95d399d66975ad828b.png

8c82e13eff857b037e15fdb652eb8830.png

参考,感谢!

http://rednaxelafx.iteye.com/blog/680746

http://www.iteye.com/topic/857587

https://blog.csdn.net/wang0112233/article/details/78641951

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值