原本是想试试什么是内存泄漏的,后来一琢磨都说循环内部定义对象效率不高,就索性也试试,下面是代码: 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;
}
}
}运行三组对比数据:
解决方案 »
- 请前辈提示下Cloneable接口的问题。
- 关于线程的简单问题,1000个线程同时...
- 问个有点无知的问题
- installanywhere做已有安装程序的升级包
- 一个关于测试的问题,高手请进,高分酬谢!!!!!!
- 老大门! 如何遍历出目录下的所有文件及其子目录下的所有文件 ?
- oracle数据显示图片显示不出来问题
- 怎样用java来创建access数据库(mdb文件)?急?
- 一个小问题,不懂
- 可以通过ResultSet返回记录集的条数吗?如果不能用什么方法可以返回记录集数?
- java中声明但未初始化的对象可以使用?
- socket中为什么ObjectOutputStream写了两次 而ObjectInputStream读了两次都是第一次写的内容啊 求大神啊
Map<Integer, String> memery = null;