【发布时间】:2011-04-16 23:13:51
【问题描述】:
确实,对于值类型,泛型集合比非泛型集合执行得更好。 (即 List 与 ArrayList)。
但是,除了装箱-拆箱步骤之外,为什么会这样呢?一旦添加到集合中,值类型对象存储在哪里?在非泛型集合中,它们会被装箱并存储在堆上,泛型有什么不同?
【问题讨论】:
-
对于相同数量的整数,sizeof(List
) ~= sizeof(int[]) ~= 1/2 sizeof(ArrayList on x86) ~= 1/3 sizeof(ArrayList on x86-64)。此外,由于装箱,数据的局部性会影响 ArrayList,并且会产生超出必要的内存碎片。