我想比较内存使用情况,分配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);
}
我可以知道我可以添加任何代码来测量吗?
答案 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