原本是想试试什么是内存泄漏的,后来一琢磨都说循环内部定义对象效率不高,就索性也试试,下面是代码: public static void main(String[] args) {
List<Map<Integer, String>> initailList = new ArrayList<Map<Integer, String>>();
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(1, "abcd");
m.put(2, "efgh");
m.put(3, "ijhl");
m.put(4, "mnop");
m.put(5, "qrst");
initailList.add(m);
long startTime = System.currentTimeMillis(); Map<Integer, Long> amount = new HashMap<Integer, Long>();
int count = 0;
while (true) {
Map<Integer, String> memery = new HashMap<Integer, String>();
memery.put(1, "abcd");
memery.put(2, "efgh");
memery.put(3, "ijhl");
memery.put(4, "mnop");
memery.put(5, "qrst");
memery.put(6, "abcd");
memery.put(7, "efgh");
memery.put(8, "ijhl");
memery.put(9, "mnop");
memery.put(10, "qrst"); memery = null;
memery = initailList.get(0);
memery.size();
memery = null; System.out.println("totalMemory:"
+ Runtime.getRuntime().totalMemory() / 1024
+ "----freeMemory:" + Runtime.getRuntime().freeMemory()
/ 1024 + "----maxMemory:"
+ Runtime.getRuntime().maxMemory() / 1024);
count++;
long endTime = System.currentTimeMillis();
if (endTime - startTime > 30000) {
amount.put(count, endTime - startTime);
if (amount.size() == 10) {
for (Map.Entry<Integer, Long> e : amount.entrySet()) {
System.out.println(e.getKey() + "---" + e.getValue());
}
break;
}
count = 0;
startTime = System.currentTimeMillis();
continue;
}
}
}运行三组对比数据: