java编程课程培训学习笔记|易疏忽的忘设初始容量
发布时间:2024-08-03 10:01:28 点击:
大家都知道Java行业是很注重技术的,即使我们入行也要不断提升自己的技术水平才能不被淘汰,那么如何不断提升自己的Java编程技术呢?北京八维教育培训学校整理了一份java课程培训学习笔记——易疏忽的忘设初始容量。

现象
在JAVA中,我们常用Collection中的Map做Cache,但是我们经常会遗忘设置初始容量。
cache = new LRULinkedHashMap< K, V>(maxCapacity);
解决
初始容量的影响有多大?拿LinkedHashMap来说,初始容量如果不设置默认是16,超过16×LOAD_FACTOR,会resize(2 * table.length),扩大2倍:采用 Entry[] newTable = new Entry[newCapacity]; transfer(newTable),即整个数组Copy, 那么对于一个需要做大容量CACHE来说,从16变成一个很大的数量,需要做多少次数组复制可想而知。

如果初始容量就设置很大,自然会减少resize, 不过可能会担心,初始容量设置很大时,没有Cache内容仍然会占用过大体积。其实可以参考以下表格简单计算下, 初始时还没有cache内容, 每个对象仅仅是4字节引用而已。
· memory for reference fields (4 bytes each);
· memory for primitive fields
启示
不仅是map, 还有stringBuffer等,都有容量resize的过程,如果数据量很大,就不能忽视初始容量可以考虑设置下,否则不仅有频繁的 resize还容易浪费容量。


