我正在尝试创建一个包含10亿个(1 000 000 000
)元素的整数数组,如下所示:
int[] prime_table = new int[1000000000];
但是虚拟机在上面的行上没有堆内存:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at algorithms.Algorithm.run(Algorithm.java:34)
at Main.main(Main.java:18)
所以我调查了一下:在Java中,Integer is 32bit,这意味着我正在分配一个32 000 000 000
位字段,大约是3 814.69727
兆字节。我用足够的堆启动了虚拟机:
java -Xms4g -Xmx4g Main
这告诉我,VM正在获得3926MB的堆大小(就在分配数组之前):
System.out.println( Runtime.getRuntime().totalMemory() / (1024*1024) +"MB");
这看起来很好,为什么会抛出错误?