【发布时间】:2011-11-10 00:55:28
【问题描述】:
使用-Xmx1G 标志来提供一个1 GB 的堆,以下工作按预期工作:
public class Biggy {
public static void main(String[] args) {
int[] array = new int[150 * 1000 * 1000];
}
}
数组应该代表大约 600 MB。
但是,下面会抛出 OutOfMemoryError:
public class Biggy {
public static void main(String[] args) {
int[] array = new int[200 * 1000 * 1000];
}
}
尽管数组应该表示大约 800 MB,因此很容易放入内存中。
丢失的记忆去哪儿了?
【问题讨论】:
-
你的虚拟机是 64 位的吗? 32 位 vm 可能无法像内存碎片一样使用那么多连续内存。
-
MB = 兆字节,Mb = 兆位。 ;)