原始Array和ArrayList在性能方面有很大区别吗?

问题描述 投票:0回答:4

我正在接收 XML,需要转换为原始数组或

ArrayList

内存和垃圾回收方面性能有很大区别吗?

我的应用程序每秒将创建数千个这样的对象,我需要最大限度地减少 GC,因为我需要实时性能。

java arrays arraylist
4个回答
7
投票

原始数组效率更高,因为它们不需要包装对象。 Guava 具有由原始数组支持的 List 实现(例如:

Ints.asList(int[])
),也许这对您来说可能是一个合理的解决方案:获得集合的功能,但仅在实际需要时使用对象。


3
投票

原始数组总是更高效,但效率高多少取决于您的用例的具体细节。最近,我通过在最内部的循环中删除 ArrayList 并用原始数组替换它们,将性能提高了 7 倍。用例是应用于长度为 100-1000 个字符的列表的 O(n^2) 算法。然后我做了一个对照实验,比较了 int[] 数组和 ArrayList 的性能,有趣的是,随着数组/列表大小变大,JIT 编译器似乎开始起作用,性能损失变得少了很多(仅〜20%)。但对于小于 500 的列表大小,ArrayList 的性能损失可能高达 10 倍。因此,如果您有一个经常调用的方法,该方法正在操作大量小列表或数组(就像我的用例一样) ),使用原始数组会对性能产生很大的影响。


0
投票

正如 Sean Patrick Floyd 指出的那样,原始数组效率更高。 然而,在某些情况下,人们肯定会更喜欢集合。但只要你只是迭代对象,就不需要集合。


0
投票

链表适合插入/删除,数组适合随机访问。

© www.soinside.com 2019 - 2024. All rights reserved.