java - 如果数组索引没有值(value),它们会影响性能/内存使用吗

标签 java arrays

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

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

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

使用过大的数组有什么禁忌吗?数组的大小在性能方面有何影响,比如仅使用该数组的 0.1% 与 100% 的数组使用情况?

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

谢谢,丹尼尔。

最佳答案

How the size of array matters in case of performance when, say only 0,1% of that array is used vs 100% array usage?

没有“X int 值的空数组”这样的东西。每个元素都有一个值——默认情况下为 0。无论其值如何,每个元素都将占用 4 个字节。您的 new int[Integer.MAX_VALUE] 数组将占用 8GB 内存。

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

关于java - 如果数组索引没有值(value),它们会影响性能/内存使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038929/

相关文章:

java - 使用参数创建此构造函数类

java - 使用 Java 流,如何过滤集合以使结果包含所有元素直到找到匹配项?

javascript - 使用 array.push 产生 undefined

java - Eclipse、Maven 和 Spring Roo 1.2.4.RELEASE : Missing artifact org. springframework.roo :org. springframework.roo.annotations:jar

java - 使用 Java 验证网络上的随机 URL

arrays - 如何在没有循环的情况下初始化哈希值?

php - 从数组构建插入查询

java - 打印输入 Java 的最后几行

java - 在汇总其他人时计数不同?

java - Grails 中的多线程 - 将域对象传递到每个线程会导致某些字段随机为空