我在J2ME应用程序中获取OutOfMemoryException。
如何找到导致此错误的原因?以及如何防止出现此错误?
我发出了一个http请求。当请求还没有完成时,屏幕上会显示一个正在加载的图像(就像浏览器在页面加载时显示的那样)。这是通过创建一个Image并重绘屏幕来完成的。
创建图像1->重绘->创建图像2->重绘->创建图像3 ->重绘->创建图像1 ->重绘->。
我注意到(使用wtk内存监视器)这消耗了太多未被垃圾回收的内存。
然后,我尝试创建一个类似于图像池的类。这个类创建所有的图像,然后显示它们。
create image 1 -> create image 2-> create image 3 -> repaint ->。
第二个场景似乎没有第一个场景消耗那么多内存。(使用wtk内存监视器)。
然而,我认为(不确定是否是这样)这两种方法都是导致这种OutOfMemoryException的原因。
发布于 2009-07-01 18:42:49
错误的原因是内存不足。很抱歉说出显而易见的事情,但您问:-)
需要一些源代码才能诊断出确切的问题。
您还应该查找正在进行递归方法调用或在循环内分配内存的代码部分。递归调用通常会生成一个StackOverflowException,但它值得一看。不过,在循环中分配内存很快就会导致OutOfMemoryError。
发布于 2011-03-07 18:25:43
你的OutOfMemoryException在移动设备上显示图像是由于堆中内存不足,这可以通过。以System.gc();身份运行垃圾收集器,但不幸的是,它在J2ME中不起作用。
因此,我们可以在这里使用
Runtime.getRuntime().gc();而不是
System.gc();发布于 2011-10-29 14:27:17
当模拟器中内存不足时,通常会出现此问题。
原因:
解决方案:
gc()函数移除垃圾回收。https://stackoverflow.com/questions/1070675
复制相似问题