【发布时间】:2011-12-24 12:00:45
【问题描述】:
Code Ranch有这个问题:
28) 如果我们有 256 MB RAM,那么我们可以创建的双精度数组的最大长度是多少? (忽略jvm内存占用和一切 否则)
回答: Integer.MAX_VALUE 作为 length() 方法必须返回正确的 'int' 长度。
我不确定我是否理解他们提供的答案。据我所知,大多数实现使用 64 位作为双精度数,这意味着我们可以在 256 MB RAM 中容纳大约 4 194 304 个双精度数(减去开销)。
那么在 256 MB RAM 的环境中,双精度数组的最大长度怎么可能是 2147483647 呢?
下面的测试代码肯定会给我们OOM吧?:
public class test {
public static void main(String[] args) {
double[] d = new double[java.lang.Integer.MAX_VALUE - 8];
}
}
【问题讨论】:
-
你是怎么到达
4 194 304的?这个数字乘以 64 位得到 32 MB。 -
数组没有
length()方法。我只能假设提问者对他的措辞不够谨慎。