2010-10-28 22 views
2

我想比較的內存使用情況,分配日曆對象和喬達的DateTime對象。需要分配的對象的計算存儲

// How much memory required to allocate 100 Calendar objects? 
for (int i = 0; i < 100; i++) { 
    Calendar c = Calendar.getInstance(); 
    l = l + c.getTimeInMillis(); 
    CalendarList.add(c); 
} 

// How much memory required to allocate Joda TimeDate objects? 
for (int i = 0; i < 100; i++) { 
    DateTime dateTime = new DateTime(); 
    l = l + dateTime.getMillis(); 
    DateTimeList.add(dateTime); 
} 

我想知道是否有任何代碼,我可以加入來衡量?

回答

2

使用儀器來獲得內存使用情況的提示:

public class MemUsage { 

    public static void main(String[] args) { 
     Instrumentation instr = InstrumentationAgent.getInstrumentation(); 
     if (instr == null) { 
      System.err.println("No Instrumentation, use the VM option \"-javaagent:Instrumentation.jar\""); 
      return; 
     } 
     System.out.println(); 
     System.out.println("an implementation-specific approximation of the amount of storage"); 
     System.out.println("Calendar = " + instr.getObjectSize(Calendar.getInstance())); 
     System.out.println(); 
    } 
} 

其他選項:MemoryMXBean但我從未使用過。

2

你可以使用Java visual vm工具,但你可以看到哪些對象採取什麼樣的內存。我不認爲這是一個「代碼」的解決方案,與的幾行代碼正確的所有情況。