Code Ranch有这个问题:
28) If we have 256 MB RAM then what is the maximum length of double array we can create? (Ignore the jvm memory occupied and everything else)
Ans: Integer.MAX_VALUE as the length() method must return correct 'int' length.
我不确定我是否理解他们提供的答案。据我所知,大多数实现都使用 64 位 double ,这意味着我们可以在 256 MB RAM 中容纳大约 4 194 304 个 double (减去开销)。
那么在 256 MB RAM 环境中, double 组的最大长度怎么会是 2147483647 呢?
下面的测试代码肯定会给我们带来 OOM,对吧?:
public class test {
public static void main(String[] args) {
double[] d = new double[java.lang.Integer.MAX_VALUE - 8];
}
}
最佳答案
编辑:下面的答案假设问题是询问可以在问题中指定的 256MB 内分配的数组大小。如果这不是问题的重点,那么就没有明确的答案 - 因为最大长度完全取决于分配给 JVM 的内存量, JVM 如何使用内存等。我们可能有 256MB 内存,但使用 -Xmx64M 运行 Sun JVM,因此可用内存甚至少于 256MB。
因此,要么问题不好,要么答案错误 - 或者很可能两者兼而有之。
<小时/>Code Ranch 的答案绝对不正确:256MB 是 28 * 220 字节 - 即 228 字节。每个 double
值占用 8 个字节,因此即使不考虑对象和长度的任何开销,在 256MB 中可以存储的 double
值的最大数量为 2 23。 Integer.MAX_VALUE
是 231 - 1,这显然要大得多。
(顺便说一句,这不是“大多数实现”使用 64 位用于 double
的问题 - 这是规范所要求的。)
所以,是的,如果您只有 256MB 可用内存,您的测试代码确实会给出 OOM。
鉴于该页面上的一些问题甚至没有答案,这个答案肯定是不正确的,并且其他答案写得很糟糕,我会完全忽略该页面。
关于java - 使用 256 MB RAM,我们可以创建的 double 组的最大长度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8624400/