我是 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/