分配10亿个整数的数组会抛出OutOfMemoryError

时间:2014-04-17 14:45:04

标签: java memory-management out-of-memory

我正在尝试创建一个包含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");

这看起来很好,为什么会抛出错误?

0 个答案:

没有答案