原本是想试试什么是内存泄漏的,后来一琢磨都说循环内部定义对象效率不高,就索性也试试,下面是代码: 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;
}
}
}运行三组对比数据:
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;
}
}
}运行三组对比数据:
解决方案 »
- eclipse中有没有自动排列,对齐格式的设置啊?
- JNI 无法获得方法问题
- java测试执行效率
- 请教:有没有办法把JScrollPane或者JInternalFrame的画面抓到Image或者ImageIcon里面?
- 怎样在java程序中显示中文??
- 程序退出的时候如何记下日志!?
- 高手请指教:java中有没有类似c语言中的dll?
- 请问在java中如何对中文字符进行排序呢?
- 100分求救!为何Java Socket 与 VC Socket连接不上???
- 关于Java向MySql数据库中插入Blob数据时报错的难题
- java中声明但未初始化的对象可以使用?
- socket中为什么ObjectOutputStream写了两次 而ObjectInputStream读了两次都是第一次写的内容啊 求大神啊
Map<Integer, String> memery = null;