数组索引如果没有值,会影响性能/内存使用情况

时间:2016-06-26 13:27:01

标签: java arrays

我是Java的新手,我最近一直想知道在这种情况下大量但部分空的数组的内存消耗:

  • 我需要一个未知大小的数组 - 它可以是300k的值,它可以是300m,但要记住它可能只保留50个值,
  • 我正在初始化大小为

    的数组
    int values[] = new int[Integer.MAX_VALUE];
    
  • 用户生成一定数量的值,每次使用生成方法时都必须存储在数组中

是否有使用过大阵列的禁忌症?如果只使用该阵列的0.1%和100%的阵列使用情况,那么阵列的大小在性能方面如何重要?

换句话说 - 当我调用X int值的空数组时,即使没有存储任何值,初始化的JVM是否会为X *(用于存储1 int值的内存)保留内存?

谢谢,丹尼尔。

2 个答案:

答案 0 :(得分:6)

  

在性能方面,数组的大小如何重要,比如只使用该数组的0.1%和100%的数组使用?

没有" X int值的空数组"。每个元素都有一个值 - 默认情况下它只是0。每个元素将占用4个字节,无论其值如何。你的new int[Integer.MAX_VALUE]阵列需要8GB的内存。

如果要创建稀疏数组,可能需要考虑使用Map。但请注意,虽然您可以拥有int数组,但如果超出缓存的Integer值范围(如果您有),则地图需要Integer类型的值很多不同的值)你最终会在Integer个对象上浪费大量空间(以及对它们的引用)。

答案 1 :(得分:0)

初始化数组时,在内存中保留一个位置。此内存大小不会更改,具体取决于数组中的值。 int数组中的默认值为0,因此您的数组不是部分为空。