【发布时间】:2015-12-29 06:41:52
【问题描述】:
如果堆足够大以创建最外层数组,则分配 1 个多维数组的简单程序会导致连续 GC(所有垃圾收集器)。似乎GC尝试了很多次。使用产品构建和 6G 堆,分配需要 3 分钟。
使用快速调试构建,分配需要 20 多分钟。
分配占用相同内存的一维数组速度很快,并且不会抛出任何内存异常为什么?
public class Test {
public static void main(String[] args) {
int a1 = 1;
long maxMemory = Runtime.getRuntime().maxMemory();
int s = (int) (Math.sqrt(Math.sqrt((double) maxMemory)));
System.out.println("s: " + s);
int[][][][] a2;
try {
a2 = new int [s][s][s][s];
a2 [s-1][s-1][s-1][s-1] = a1;
if ( a2 [s-1][s-1][s-1][s-1] != 1 ) {
throw new RuntimeException("Error: " + a2 [s-1][s-1][s-1][s-1]);
}
} catch (OutOfMemoryError e) {
System.out.println("Passed.");
}
}
}
【问题讨论】:
标签: java arrays memory-management