(转)Java中定义对象的时候,New和Null的内存调用

本文转载自:http://blog.163.com/jackswu@yeah/blog/static/1406291232010112343040616/


代码一 

Java代码 

List list = new ArrayList();  



代码二 

Java代码 

List list = null;  


如果有10000个类似于list的对象,代码一比代码二会多占多少内存?

 

 

/**
 *
 */
package TestPack;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Jack.
 * @Time:下午 04:14:38.
 * @FileName:TestNullAndNew.java.
 */
public class TestNullAndNew
{

    /**
     * @param args
     *            .
     */
    @SuppressWarnings({ "rawtypes", "unused" })
    public static void main(String[] args)
    {
        long freeMemory = Runtime.getRuntime().freeMemory();
        System.out.println("系统空余内存(KB) : " + freeMemory);
        System.out.println("系统总内存(KB) : " + Runtime.getRuntime().totalMemory());
        for (int i = 0; i < 10000; i++)
        {
            List list = new ArrayList();
        }
        long freeMemoryNew = Runtime.getRuntime().freeMemory();
        System.out.println("使用new之前的空余内存(KB):" + freeMemory);
        System.out.println("使用new之后的空余内存(KB) : " + freeMemoryNew
                + "\nnew的内存使用(KB) : " + (freeMemory - freeMemoryNew));

        for (int i = 0; i < 10000; i++)
        {
            List list = null;
        }
        long freeMemoryNull = Runtime.getRuntime().freeMemory();
        System.out.println("使用null之前的空余内存(KB):" + freeMemoryNew);
        System.out.println("使用null之后的空余内存(KB): " + freeMemoryNull
                + "\nnull的内存使用(KB) : " + (freeMemoryNew - freeMemoryNull));
        System.out.println("totalMemory(KB) : "
                + Runtime.getRuntime().totalMemory());
    }
}

 

运行结果:

系统空余内存(KB) : 15940336

系统总内存(KB) : 16252928

使用new之前的空余内存(KB):15940336

使用new之后的空余内存(KB) : 15216704

new的内存使用(KB) : 723632

使用null之前的空余内存(KB):15216704

使用null之后的空余内存(KB): 15216704

null的内存使用(KB) : 0

totalMemory(KB) : 16252928

 

 

结论: 
List list = null;  不会占用内存。 
代码1执行10000次占用24.944M内存。 

具体执行结果可能跟操作系统与主机配置和JDK版本有关,稍有偏差。 

我们应该尽量避免创建对象,可以考虑使用单例模式。关于JAVA性能方面推荐《Effective Java》中文版 第2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值