因为For循环中的堆内存而内存不足?

时间:2012-08-27 15:50:34

标签: 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){
      int[] a = new int[10000];
      Bitmap bitmap = image.copy(sentBitmap.getConfig(), true);
      // Do some stuff here to process image
      ...
      return (bitmap);
 }

for循环参数someNumber小于5,我的应用程序非常好,否则,我将outOfMemory。所以我想要一个建议来解决这个问题exception!我可以使用System.gc()吗?或者,我可以在for的每个循环后执行某些操作来删除未启用的内存吗?

编辑:对不起,也许我省略了太多,我更新了我的代码!

Edited2 :如果不是for循环,我会多次使用image = doSomething(...)来电话,exception不再是!!

谢谢!

2 个答案:

答案 0 :(得分:1)

您可能需要在for循环中使用image.recycle()时调用它。

编辑:啊,我看到你正在尝试做什么,将多个过滤器应用于同一图像。试试这个:

 Bitmap image = ...;
 for(int i =0; i < someNumber; i++){
      Bitmap newImage = doSomeThing(image, width, height);
      image.recycle();
      image = newImage;
 }

答案 1 :(得分:0)

Java立场上,System.gc()可能没有任何效果,因为当内存不足时,如果可以,Java将清除它。

您的doSomeThing()电话可能会为您拥有的内存量创建太多对象。

要么增加它,要么因为内存占用限制而不能,请调整Eden空间。