如果我们不能使用10 ^ 9 * 10 ^ 9的2D数组,那么为什么我们能够实例化它呢?

时间:2017-06-05 18:15:21

标签: java arrays

我可以声明2D array大小为10^9*10^9,但是对于需要此大小的给定测试用例,在线程“main”中抛出异常异常java.lang.OutOfMemoryError:Java堆空间和是的,如果它导致完整的内存使用,那么为什么能够实例化这样的数组?

2 个答案:

答案 0 :(得分:4)

java.lang.OutOfMemoryError是运行时错误。当编译器无法确定是否可以执行操作时,会保留此类异常和错误。

在尝试实例化对象时,正在运行的JVM会决定抛出内存不足错误。如果在具有更多内存的系统上运行相同的程序,或者让运行的JVM通过增加堆大小(how?)来使用更多内存,程序可能会运行完成而不会抛出错误。

答案 1 :(得分:1)

值得一提的一个方面:当然某些级别的检查在编译时发生:在声明数组大小时只能使用int值。

编译器会阻止你在那里使用long值,当然你不会允许使用负数(当使用文字时)。

但正如另一个答案所说:接受代码的编译器与运行时接受输入的实际情况不同。