ArrayList性能短板深入分析

ArrayList的数据结构主体是Object[]数组,数组对象在内存的位置是成块成块的。

  1、对数组进行非尾部修改,会引发System.arrayCopy()行为。这就需要对后半部要移动的对象进行内存位置的调整,这是性能瓶颈最关键的地方之一;

  2、对数组进行非尾部修改,如果要增加数组长度,倘若要增加的长度对于原来的数组来说,在内存地址空间上“触手可及”,那么扩容是比较方便的;但若不是,那么调整成本就会明显增加;

  3、数组复制,这一行为对内存的占用应该会翻倍,不过这要看java的native方法的实现。

posted @ 2018-08-08 22:26  梁桦  阅读(361)  评论(0编辑  收藏  举报