我是Java的新手,我最近一直想知道在这种情况下大量但部分空的数组的内存消耗:
我正在初始化大小为
的数组int values[] = new int[Integer.MAX_VALUE];
用户生成一定数量的值,每次使用生成方法时都必须存储在数组中
是否有使用过大阵列的禁忌症?如果只使用该阵列的0.1%和100%的阵列使用情况,那么阵列的大小在性能方面如何重要?
换句话说 - 当我调用X int值的空数组时,即使没有存储任何值,初始化的JVM是否会为X *(用于存储1 int值的内存)保留内存?
谢谢,丹尼尔。
答案 0 :(得分:6)
在性能方面,数组的大小如何重要,比如只使用该数组的0.1%和100%的数组使用?
没有" X int值的空数组"。每个元素都有一个值 - 默认情况下它只是0。每个元素将占用4个字节,无论其值如何。你的new int[Integer.MAX_VALUE]
阵列需要8GB的内存。
如果要创建稀疏数组,可能需要考虑使用Map
。但请注意,虽然您可以拥有int
数组,但如果超出缓存的Integer
值范围(如果您有),则地图需要Integer
类型的值很多不同的值)你最终会在Integer
个对象上浪费大量空间(以及对它们的引用)。
答案 1 :(得分:0)
初始化数组时,在内存中保留一个位置。此内存大小不会更改,具体取决于数组中的值。 int数组中的默认值为0,因此您的数组不是部分为空。