ArrayList<Integer>与int[]的性能

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

我想将一百万个整数存储在数据结构中。我想知道 int 数组 (int[]) 是否比 ArrayList 更高效。与 ArrayList 相比,使用 int[] 是否有任何性能提升?我相信 ArrayList 使用的内存比 int[] 更多,但我不知道额外的内存是否可以忽略不计。

如果我增加数组的大小(从一百万到十亿个整数),答案会改变吗? ArrayList 使用的额外内存是否可以忽略不计?

java arrays performance arraylist
1个回答
0
投票

默认情况下,ArrayList 的容量最多可达其所包含元素数量的两倍。然而,

ArrayList<Integer>
int[]
之间的主要区别在于
Integer
int
之间的区别:
Integer
是一个对象,每个对象存储JVM的一些元数据(运行时类型、身份哈希码、. ..),这使得它比普通的
int
.

稍大一些

此元数据的大小没有指定,并且可能会有所不同。您可以按如下方式测量:

public class Test {
    
    private static long usedMemory() {
        var r = Runtime.getRuntime();
        return r.totalMemory() - r.freeMemory();
    }
    
    public static void main(String[] args) {
        int elements = 10_000_000;
        long start = usedMemory();
        int[] data = new int[elements];
        long end = usedMemory();
        System.out.println("int[] used " + (double)(end - start) / data.length + " bytes per element");
        
        start = usedMemory();
        var list = new ArrayList<Integer>();
        for (int i = 0; i < elements; i++) {
            list.add(i);
        }
        end = usedMemory();
        System.out.println("ArrayList<Integer> used " + (double)(end - start) / list.size() + " bytes per element");
    }
}

在我的 JVM 上,打印:

int[] used 4.194304 bytes per element
ArrayList<Integer> used 26.1477176 bytes per element
© www.soinside.com 2019 - 2024. All rights reserved.