(轉)Java中定義物件的時候,New和Null的記憶體呼叫

weixin_34262482發表於2011-11-02

本文轉載自: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

相關文章