JVM的缓存机制(案例)

JVM缓存机制

下面先来看一些Java 测试代码

		//第一组
		Integer num1 = 127;
        Integer num2 = 127;
        System.out.println(num1 == num2);
        //------------------------------------
        //第二组
        Integer num3 = 128;
        Integer num4 = 128;
        System.out.println(num3 == num4);
        //------------------------------------
        //第三组
        Integer num5 = new Integer(127);
        Integer num6 = new Integer(127);
        System.out.println(num5 == num6);

输出的测试代码为 true false false

原因:JVM的缓存机制所导致.
在创建变量时, jvm运行时会创建一个缓存区域,并创建一个Integer类型的数组.
1.该数组的存储范围为:-128~127之间(包含:128和127)的数据是在常量池维护,不会新分配内存空间,若变量的初始化值在此范围内, JVM便会直接从缓存里加载. 因此第一组的num1和num2指向的时同一内存地址.输出true;
2.在第二组中, num3和num4赋值为128, 超过此缓存区域. 会重新开辟两个内存空间, 内存的地址必然不同, 故输出false;
3.在第三组中, 使用了new关键字, 在Java中使用new关键字,便会在堆内存开辟新内存空间并返回该空间地址值, 创建出两个对象, 而两个对象的哈希值一般不同.故输出false;(这里应与JVM的缓存区域做区分)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值