我正在接收XML,需要转换为原始Array或ArrayList。 在内存和垃圾收集方面,性能方面有很大差异吗? 我的应用程序将每秒创建数千个这样的对象,我需要最小化GC,因为我需要实时性能。
Thxs
答案 0 :(得分:5)
原始数组效率更高,因为它们不需要包装器对象。 Guava具有由原始数组支持的List实现(例如:Ints.asList(int[])
),这可能是一个合理的解决方案:获得集合的强大功能,但只在实际需要时使用对象。
答案 1 :(得分:1)
原始数组总是更有效,但取决于用例的具体细节。我最近通过在最内层循环中删除ArrayLists并用原始数组替换它们来加速性能7倍。用例是应用于列出100-1000个字符长的O(n ^ 2)算法。然后我做了一个受控实验,将int []数组的性能与ArrayList进行了比较,有趣的是,随着数组/列表大小变大,JIT编译器似乎开始运行,性能损失也大大降低(仅限于〜20%)。但是对于小于500的列表大小,ArrayList的性能损失可以高达10倍。因此,如果你有一个经常调用的方法,它正在操作大量的小列表或数组(就像我的用例一样) ),使用primitave数组可以产生很大的性能影响。
答案 2 :(得分:0)
正如肖恩·帕特里克·弗洛伊德所指出的那样,原始数组效率更高。 但是,有些人肯定更喜欢收藏品。但只要您只是迭代对象,就不需要收集。
答案 3 :(得分:0)
链接列表适合插入/删除,而数组则适合随机访问。