线程“主”java.lang.OutOfMemoryError 中的异常:在 ArrayList 中添加值时发生 Java 堆空间错误 [重复]
Posted
技术标签:
【中文标题】线程“主”java.lang.OutOfMemoryError 中的异常:在 ArrayList 中添加值时发生 Java 堆空间错误 [重复]【英文标题】:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space error ocurred while adding value in ArrayList [duplicate] 【发布时间】:2021-11-28 02:28:49 【问题描述】:这是我从三个数组中查找共同元素的代码。 我正在尝试使用 add() 函数在 ArrayList 中添加元素,但出现内存不足错误。 这是我的代码-
ArrayList<Integer> commonElements(int A[], int B[], int C[], int n1, int n2, int n3)
// code here
ArrayList<Integer> ls=new ArrayList<Integer>(n1);
int i=0,j=0,k=0;
while(i<n1 && j<n2 && k<n3)
if(A[i]==B[j] && B[j]==C[k])
int t=A[i];
ls.add(t);
else if(A[i]<B[j])
i++;
else if(B[j]<C[k])
j++;
else
k++;
return ls;
这是我的错误-
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3720)
at java.base/java.util.Arrays.copyOf(Arrays.java:3689)
at java.base/java.util.ArrayList.grow(ArrayList.java:237)
at java.base/java.util.ArrayList.grow(ArrayList.java:242)
at java.base/java.util.ArrayList.add(ArrayList.java:485)
at java.base/java.util.ArrayList.add(ArrayList.java:498)
at Solution.commonElements(GFG.java:68)
at GFG.main(GFG.java:36)
【问题讨论】:
使用调试器单步调试您的代码,您会发现问题所在。在您向列表中添加项目的情况下,哪些循环索引变量会增加? 当所有元素相等时,将其添加到输出并再次迭代。由于您不更改 i、j 或 k,因此元素仍然相同,并且您再次添加相同的元素。又一次。 【参考方案1】: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Java 说它内存不足。有一个无限循环导致条件永远不会退出 while 循环,无限地递增变量之一,直到达到内存上限。查看while流控的条件。
【讨论】:
【参考方案2】:当找到共同元素时,即
if(A[i]==B[j] && B[j]==C[k]) int t=A[i]; ls.add(t);
您没有增加 i 或 j 或 k,因此它陷入了无限循环,导致堆空间使用。增加它们应该可以理想地完成工作。
【讨论】:
【参考方案3】:我需要在 if 条件中增加 i,j,k 以防止出现此错误。
ArrayList<Integer> commonElements(int A[], int B[], int C[], int n1, int n2, int n3)
// code here
ArrayList<Integer> ls=new ArrayList<Integer>(n1);
int i=0,j=0,k=0;
while(i<n1 && j<n2 && k<n3)
if(A[i]==B[j] && B[j]==C[k])
if(!ls.contains(A[i]))
ls.add(A[i]);
i++;
j++;
k++;
else if(A[i]<B[j])
i++;
else if(B[j]<C[k])
j++;
else
k++;
return ls;
【讨论】:
以上是关于线程“主”java.lang.OutOfMemoryError 中的异常:在 ArrayList 中添加值时发生 Java 堆空间错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android 异步操作Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )