计算分配对象所需的内存

时间:2010-10-28 14:33:57

标签: java

我想比较内存使用情况,分配Calendar对象和Joda的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);
}

我可以知道我可以添加任何代码来测量吗?

3 个答案:

答案 0 :(得分:2)

您可以使用Java visual vm工具,在那里您可以看到哪些对象占用了哪些内存。我不认为在所有情况下都有一个“代码内”解决方案,只需几行代码即可。

答案 1 :(得分: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 :(得分:0)

您可以查看以下 Java Specialists' newsletter