2013-03-02 37 views
3

我正在解决this问题。它需要50000字节的内存限制。所以如果我分配一个尺寸为1000 X 1000的二维数组,它不应该超过内存边界吗? PS:我看到this解决问题,程序员已经分配了一个大小为m X m的二维数组。如果m等于1000,那么我认为内存限制会被超过。但是,codechef已经接受了他的解决方案。Java:Java编译器计算的程序的内存使用情况如何?

是否有codechef编译器的错误机制,或者我错过了什么?

+4

编译器不计算内存。当数组对象被创建时分配内存,这在运行时发生。 – 2013-03-02 09:45:31

+0

所以不应该超过内存限制? – 2013-03-02 09:47:57

+0

请参阅NPE的答案以获得合理的解释。堆空间将有一些限制(通常可以通过“Xms”和类似的配置)。尝试分配更大的内容 - 例如1GB - 这应该导致* runtime * [OutOfMemoryError](http://docs.oracle.com/javase/6/docs/api/java/lang/OutOfMemoryError.html)。 – 2013-03-02 09:48:53

回答

3

从网站:

来源限制:50000字节

此限制适用于您的源代码的大小,而不是内存的程序分配的金额。这两者完全无关。

0

50000字节是您的源代码可以拥有的最大大小,它与您程序使用的内存没有任何关系。尺寸为1000 * 1000的二维数组将从RAM(主存储器)分配给您的程序。

顺便说一下,在cadechef中,单个阵列的最大尺寸限制在10^7到10^8之间,因为分配连续内存位置非常困难。

您可以在codechef上参考此discussion了解更多详情。

相关问题