我可以声明2D array
大小为10^9*10^9
,但是对于需要此大小的给定测试用例,在线程“main”中抛出异常异常java.lang.OutOfMemoryError:Java堆空间和是的,如果它导致完整的内存使用,那么为什么能够实例化这样的数组?
答案 0 :(得分:4)
java.lang.OutOfMemoryError
是运行时错误。当编译器无法确定是否可以执行操作时,会保留此类异常和错误。
在尝试实例化对象时,正在运行的JVM会决定抛出内存不足错误。如果在具有更多内存的系统上运行相同的程序,或者让运行的JVM通过增加堆大小(how?)来使用更多内存,程序可能会运行完成而不会抛出错误。
答案 1 :(得分:1)
值得一提的一个方面:当然某些级别的检查在编译时发生:在声明数组大小时只能使用int值。
编译器会阻止你在那里使用long值,当然你不会允许使用负数(当使用文字时)。
但正如另一个答案所说:接受代码的编译器与运行时接受输入的实际情况不同。