zoukankan      html  css  js  c++  java
  • (转)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

  • 相关阅读:
    2017-2018-2 20155206 《网络对抗技术》 实验六:信息搜集与漏洞扫描
    20155206 Exp5 MSF基础应用
    20155206 实验4 恶意代码分析
    20155206《网络攻防》第三次实验_免杀及其原理
    20155206 Exp2 后门原理与实践
    20155206赵飞 Exp1PC平台逆向破解及Bof基础实践
    J-19 集合对象
    J-18 集合对象
    J-17 集合对象
    J-16 集合对象
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/2232846.html
Copyright © 2011-2022 走看看