【Java基础】内存管理

内存管理

尽管Java提供了自动的垃圾回收,但是有时会希望了解对象堆有多大或剩余的对堆空间的大小。可以通过Runtime类的方法,获取内存大小,并对内存进行管理。

下面的例子将使用gc(), freeMemory(), totalMemory()三个方法

public class MemoryDemo {
    public static void main(String[] args) {
        Runtime r = Runtime.getRuntime();
        long mem1, mem2;
        Integer someints[] = new Integer[1000];
        System.out.println("Total memory is: " + r.totalMemory());
        mem1 = r.freeMemory();
        System.out.println("Initial memory is: " + mem1);
        r.gc();
        mem1 = r.freeMemory();
        System.out.println("Free memory after garbage collection: " + mem1);
        for (int i = 0; i<1000; i++) {
            someints[i] = new Integer(i);
        }
        mem2 = r.freeMemory();
        System.out.println("Free memory after collection: " + mem2);
        System.out.println("Memory used by allocation: " + (mem1 - mem2));

        for (int i=0; i<1000; i++) {
            someints[i] = null;
        }
        r.gc();
        mem2 = r.freeMemory();
        System.out.println("Free memory after collecting" + " discarded Integers: " + mem2);
    }
}

输出结果

Total memory is: 257425408
Initial memory is: 253374984
Free memory after garbage collection: 256738712
Free memory after collection: 254054264
Memory used by allocation: 2684448
Free memory after collecting discarded Integers: 256814648

这里可以看到:Total memory is: 257425408 这里单位是bytes 。 257425408bytes = 245.5M
在这里插入图片描述
看图可以知道JVM运行时需要使用的内存是245.5M

Initial memory is: 253374984 也就是初始可用的内存是241.63721466064453M

再调用gc()释放内存之后
Free memory after garbage collection: 256738712, 可用内存变为 244.8451156616211M

当我们在数组someints里面创建Integer对象后
Free memory after collection: 254054264, 可用内存变为242.28502655029297M

把两个剩余可用内存相减可以得到,数组someints使用了多少内存
Memory used by allocation: 2684448, 使用内存2.560089111328125M

设置数组为空,释放内存
Free memory after collecting discarded Integers: 256814648, 可用内存为244.91753387451172M

我们这里改下代码 someints[i] = new Integer(i); 改为 someints[i] = i;

看下输出结果

Total memory is: 257425408
Initial memory is: 253374984
Free memory after garbage collection: 256738712
Free memory after collection: 254054264
Memory used by allocation: 2684448
Free memory after collecting discarded Integers: 256814648

可以看到用Integer还是直接赋值,使用的内存是一致的
Memory used by allocation: 2684448 使用内存为2.560089111328125M

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值