Java 由于For循环中的堆内存而导致内存不足?

Java 由于For循环中的堆内存而导致内存不足?,java,android,heap-memory,Java,Android,Heap Memory,最近,我声明了一个函数,并将该函数放入for循环中,如下所示: Bitmap image = ...//Do stuff to get image's bitmap, it's quite ok for(int i =0; i < someNumber; i++){ image = doSomeThing(image, width, height); } private Bitmap doSomeThing(image, width, height){

最近,我声明了一个函数,并将该函数放入
for
循环中,如下所示:

 Bitmap image = ...//Do stuff to get image's bitmap, it's quite ok
 for(int i =0; i < someNumber; i++){
      image = doSomeThing(image, width, height);      
 }

 private Bitmap doSomeThing(image, width, height){
      int[] a = new int[10000];
      Bitmap bitmap = image.copy(sentBitmap.getConfig(), true);
      // Do some stuff here to process image
      ...
      return (bitmap);
 }
Bitmap image=…//做一些事情来获取图像的位图,这很好
for(int i=0;i
由于
for
循环参数
someNumber
小于5,我的应用程序很好,否则,我将
outOfMemory
。因此,我想征求一个建议来解决这个
异常
!我可以使用
System.gc()
?或者我可以在每次循环
for
之后删除未使用的内存吗

编辑:对不起,也许我遗漏了太多,我更新了我的代码

Edited2:如果我多次使用call
image=doSomething(…)
而不是
for
循环,则
异常不再存在


谢谢

Java
的角度来看,
System.gc()
可能没有效果,因为当内存耗尽时,如果可以,Java会清除它

您的
doSomeThing()
调用可能创建了太多的对象,占用了您现有的内存量


或者增加它,如果由于内存占用的限制而无法增加,请调整
Eden
空间。

在for循环中使用完后,可能需要调用
image.recycle()

编辑:啊,我明白你想做什么了,对同一张图像应用多个过滤器。试试这个:

 Bitmap image = ...;
 for(int i =0; i < someNumber; i++){
      Bitmap newImage = doSomeThing(image, width, height);
      image.recycle();
      image = newImage;
 }
位图图像=。。。; for(int i=0;i
是否将对新阵列的引用保存在某个位置?否则,我不明白为什么JVM应该抱怨,而不是释放内存。我们可以显示更多代码吗?假设循环体不包含您遗漏的任何内容,并且没有将[]的引用泄漏到doSomeThing()之外,您应该立即或永远不会得到异常。您可能忽略了什么。使用DDMS并在循环前后跟踪堆,以查看是否是循环导致了它。此外,如果您向我们展示如何使用[]也会有所帮助,但我想
返回(位图)
,如果我调用
回收()
,我将失去一切!!如果不再使用,
bitmap
,最好在
image
上调用recycle。这是关于android的问题,我怀疑它是否提供了增加eden空间大小的选项。