最近研究Lucene的时候,遇到的用到大量Map的问题,心生好奇,想看一下在1W,10W,100W三种数据量下,new HashMap ,与 HashMap.clear()方法的效率问题。

提前说明:就是自己好奇测着玩的,不能作为任何依据,只是提供一个参考。

JDK版本:1.8

IDE:idea

Clear()

数据量级:1W ,执行次数:10次,取10次时间的平均值

执行结果:

map-clear:27
map-clear:27
map-clear:15
map-clear:14
map-clear:15
map-clear:13
map-clear:11
map-clear:3
map-clear:4
map-clear:4
平均时间:13

执行内存快照:

数据量级:10W ,执行次数:10次,取10次时间的平均值

执行结果:

map-clear:212
map-clear:128
map-clear:99
map-clear:161
map-clear:49
map-clear:58
map-clear:44
map-clear:112
map-clear:218
map-clear:40
平均时间:112

执行内存快照:

数据量级:100W ,执行次数:10次,取10次时间的平均值

执行结果:

map-clear:661
map-clear:657
map-clear:364
map-clear:426
map-clear:343
map-clear:481
map-clear:271
map-clear:212
map-clear:176
map-clear:165
平均时间:375

执行内存快照:

new HashMap()

数据量级:1W ,执行次数:10次,取10次时间的平均值

执行结果:

map-new:27
map-new:20
map-new:10
map-new:13
map-new:19
map-new:21
map-new:9
map-new:7
map-new:7
map-new:6
平均时间:13

执行内存快照:

数据量级:10W ,执行次数:10次,取10次时间的平均值

执行结果:

map-new:122
map-new:58
map-new:66
map-new:110
map-new:83
map-new:45
map-new:62
map-new:36
map-new:29
map-new:30
平均时间:64

执行内存快照:

数据量级:100W ,执行次数:10次,取10次时间的平均值

执行结果:

map-new:539
map-new:493
map-new:420
map-new:294
map-new:455
map-new:305
map-new:379
map-new:256
map-new:314
map-new:315
平均时间:377

执行内存快照:

测试类:

public class MapTest {

    public static void main(String[] args) throws InterruptedException {

        long totalTimes = 0L;
for (int i = 0 ; i < 10 ; i++){
totalTimes += mapToNew(1000000L);
}
System.out.println("平均时间:" + (totalTimes / 10));
Thread.sleep(100000L);
} /**
* new map
* @param size
* @return
*/
public static long mapToNew(long size) {
long nowTime = new Date().getTime();
Map<String,Object> map;
for (int i = 0 ; i < size ; i++){
map = new HashMap<>();
map.put("id",i);
map.put("name","测试文章");
map.put("realname","测试文章11111");
map.put("text","测试文章+++++++++++++++++++");
map.put("long",4324L);
map.put("double",4354D);
map.put("text2","测试文章+++++++++++++++++++");
map.put("text3","测试文章+++++++++++++++++++");
map.put("text4","测试文章+++++++++++++++++++");
map.put("text5","测试文章+++++++++++++++++++");
map.put("text6","测试文章+++++++++++++++++++");
map.put("text7","测试文章+++++++++++++++++++");
}
long timeSize = new Date().getTime() - nowTime;
System.out.println("map-new:" + timeSize);
return timeSize;
} /**
* clear map
* @param size
* @return
*/
public static long mapToClear(long size) {
long nowTime = new Date().getTime();
Map<String,Object> map = new HashMap<>();
for (int i = 0 ; i < size ; i++){
map.clear();
map.put("id",i);
map.put("name","测试文章");
map.put("realname","测试文章11111");
map.put("text","测试文章+++++++++++++++++++");
map.put("long",4324L);
map.put("double",4354D);
map.put("text2","测试文章+++++++++++++++++++");
map.put("text3","测试文章+++++++++++++++++++");
map.put("text4","测试文章+++++++++++++++++++");
map.put("text5","测试文章+++++++++++++++++++");
map.put("text6","测试文章+++++++++++++++++++");
map.put("text7","测试文章+++++++++++++++++++");
}
long timeSize = new Date().getTime() - nowTime;
System.out.println("map-clear:" + timeSize);
return timeSize;
} }

HashMap的clear()方法和new HashMap的效率问题的更多相关文章

  1. Session的clear方法和flush方法

    Session Clear()与 Flush() 解释 1.Clear 方法  无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强 ...

  2. Hibernate中evict方法和clear方法说明

    Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...

  3. HashMap的clear方法

    我们都知道HashMap的clear()方法会清楚map的映射关系,至于怎么实现的呢? 下面先看一下clear()方法的源码 public void clear() { Node<K,V> ...

  4. 集合hashCode()方法和equals()办法

    1.哈希码:         Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码. 2.利用哈希码向集合中插入数据的顺序?     ...

  5. 详解equals()方法和hashCode()方法

    前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方 ...

  6. java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样

    一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...

  7. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  8. hashCode()方法和equal()方法的区别

    本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...

  9. Java 如何重写对象的 equals 方法和 hashCode 方法

    前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31.接下来看看各种为什么. 一.需求: 对比两个对 ...

随机推荐

  1. 为甚么要将某个方法声明为final呢?

    他可以防止其他人覆盖该方法.但更重要的一点或许是:这样做可以有效的"关闭"动态绑定,或者说, 告诉编译器不需要对其进行丰台绑定.这样,编译器就可以为final方法调用生成更有效的代 ...

  2. mvn test 中文乱码

    有两种解决办法: 1.设置encoding:<argLine>-Dfile.encoding=UTF-8</argLine>,解决读取文件中的中文乱码问题 2.升级maven- ...

  3. C# 中 in,out,ref 的作用与区别

    In:过程不会改写In的内容 Out和out:传入的值不会被过程所读取,但过程可以写 ref:传入的值,过程会读,也会写 就象你把布料送到裁缝的一个收料箱(裁缝用这个区别是哪家客户) IN:这块布料, ...

  4. Intellij IDEA 2017 破解

    http://idea.lanyus.com/ https://www.cnblogs.com/wang1024/p/7485758.html

  5. 使用Nginx+uWSGI+Django方法部署Django程序(下)

    在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的, ...

  6. jQuery (样式篇)

    1.$(document).ready 的作用是等页面的文档(document)中的节点都加载完毕后,再执行后续的代码,因为我们在执行代码的时候,可能会依赖页面的某一个元素,我们要确保这个元素真正的的 ...

  7. POSTGRESQL同步——SLONY-I配置

    来自:http://bbs.chinaunix.net/thread-955564-1-1.html 参考文档 http://bbs.chinaunix.net/viewthr ... page%3D ...

  8. 【Python3 爬虫】14_爬取淘宝上的手机图片

    现在我们想要使用爬虫爬取淘宝上的手机图片,那么该如何爬取呢?该做些什么准备工作呢? 首先,我们需要分析网页,先看看网页有哪些规律 打开淘宝网站http://www.taobao.com/ 我们可以看到 ...

  9. 帮朋友转发招聘信息 南京知名互联网公司招聘java、测试、前端,具体私聊

    一.java开发 1.5年及以上J2EE方向开发经验 2.精通spring等开源框架 3.熟悉html.javascript.css.jsp/freemarker.jquery的使用 4.熟悉使用my ...

  10. windows lua 多线程 线程同步

    今天在改一个程序,改成部分逻辑用lua写,这个程序是多线程的.将程序中部分逻辑改成lua之后,各种非法访问内存错误,各种奇奇怪怪的问题,不分时间,不分地点的出现崩溃.从调用堆栈来看,基本都是使用lua ...