HashMap注意点

    xiaoxiao2022-07-07  212

    注意点1:初始容量设置

      尽量根据业务场景设置合理的初始容量(2的幂次方),避免频繁扩容和数据迁移,以此提升性能;

    注意点2:默认最大容量

    表容量/桶个数最大为2^30(MAXIMUM_CAPACITY设定),当桶个数超过设定上限时不再扩容;元素个数没有上限,当不断地往map中添加元素时,要么由于内存不够导致OOM,要么桶个数达到上限碰撞概率变大,导致map性能变差,实际生产中往往需要设定map的容量上限; /** * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arguments. * MUST be a power of two <= 1<<30. */ static final int MAXIMUM_CAPACITY = 1 << 30;

    注意点3:容量限制

      如上所述,map中元素很多时可能会导致性能变差或者OOM,因此需要设定map元素个数的上限;

    方式一:非精确控制容量

    if(map.size() > MAX_CAPACITY){ throw new Exception(); } map.put(k,v);

    方式二:精确控制容量

    v = map.get(k); if(null == v){ try{ LOCK.lock(); v = map.get(k); if(null == v){ if(map.size() > MAX_CAPACITY){ throw new Exception(); } map.put(k,v); } }finally{ LOCK.unlock(); } }

    参考:

    容量初始化:https://www.hollischuang.com/archives/2431
    最新回复(0)