java数组内存不足错误

java数组内存不足错误,java,Java,我在java中的一个方法中使用以下代码: int [] byte_song = new int[8414449]; int [] int_song = new int[8414449 - 45]; 如果我只是写: int [] byte_song = new int[8414449]; 它没有给我任何错误。但是如果我写: int [] byte_song = new int[8414449]; int [] int_song = new int[8414449 - 45]; 它给

我在java中的一个方法中使用以下代码:

int []  byte_song = new int[8414449];
int []  int_song = new int[8414449 - 45];
如果我只是写:

int []  byte_song = new int[8414449];
它没有给我任何错误。但是如果我写:

int []  byte_song = new int[8414449];
int []  int_song = new int[8414449 - 45];
它给我
OutOfMemoryError


我还尝试调用
System.gc()之前
int[]int_song=新的int[8414449-45]我仍然得到错误。有人能帮我一下吗。

你需要分配更多的内存。为此,请使用
-Xmx
。JVM有一个默认的内存量,超过这个内存量,它将不允许您再分配更多的内存,并且它通常小于您在计算机上的内存量。

System.gc()只是一个请求。我们不能依靠它来立即释放内存。所以让我来了解一下:当分配更少的内存时,它不会给你一个错误,但当分配更多的内存时,它会给你一个
OutOfMemoryError
?是的,这很奇怪。@Joyson:一些数学知识。您的代码块至少需要8414449*4*2(假设45不起作用)。byte_song不符合任何垃圾收集的条件。您可以发布一个完整的程序并检查您使用的JVM版本(以及平台)吗?我用这些行创建了一个测试程序,它对我来说很好;您可以使用内存映射文件来存储非常大的数据数组。这些文件的大小只受磁盘上可用空间的限制,而不受最大堆大小的限制。如果有帮助,请告诉我如何使用上面的-Xmx分配更多内存。@Joyson:Example java-Xmx1100m-classpath。为什么不在答案中引用这个链接呢?没错,但是我不能用cmd来编程。我想如果我没有错的话,上面的命令必须用cmd来编写。@Joyson:没错。必须在jvm启动时设置该值。它也可以在eclipse运行配置中设置。请检查文档。@Joyson: