java - 为什么下面的代码抛出 'java.lang.OutOfMemoryError: Java heap space'

标签 java arrays out-of-memory heap-memory

第 1 部分抛出错误,而第 2 部分没有,为什么?

 //part 1
 Object[] arr = new Object[10000000];
 Object[] arr1 = arr;
 for(int i = 0; i < 100; i++) {
     arr1[0] = new Object[10000000];
     arr1 = (Object[]) arr1[0];
 }

//part 2
Object[] arr1 = new Object[10000000];
for(int i = 0; i < 100; i++) {
   arr1[0] = new Object[10000000];
   arr1 = (Object[]) arr1[0];
}

最佳答案

在您的第一个代码片段中,您将保留对原始大型数组的引用,因此保留对您随后创建的每个数组的引用。

在第二个片段中,您将丢弃对原始大数组的引用 - 事实上,您将在循环的每次迭代中丢弃对除您创建的数组之外的每个数组的引用。因此,除了其中一个之外,其他所有数组都可以被垃圾收集,并且您只需要在循环中的任何点为其中两个数组提供足够的堆空间。

关于java - 为什么下面的代码抛出 'java.lang.OutOfMemoryError: Java heap space',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266942/

相关文章:

java - 找出所有小于 200 万的素数之和需要多少时间?

PHP多维数组相交

arrays - 创建一个数组,在 c 中逐个字符地存储

java - tomcat 在内存不足错误时不生成 hprof 文件

android - java.lang.OutOfMemoryError when createBitmap

java - 这是如何安排 java 方法在 1 秒后运行?

java - 使用递归 Java 镜像三角形

java - Java 中的日期到日期的转换

android - 有没有办法在android studio中将音频文件转换为字节数组

android - 尝试重新缩放位图时出现 OutOfMemory 错误