首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >j2me应用程序中的OutOfMemoryError

j2me应用程序中的OutOfMemoryError
EN

Stack Overflow用户
提问于 2009-07-01 18:38:52
回答 6查看 3.4K关注 0票数 2

我在J2ME应用程序中获取OutOfMemoryException

如何找到导致此错误的原因?以及如何防止出现此错误?

我发出了一个http请求。当请求还没有完成时,屏幕上会显示一个正在加载的图像(就像浏览器在页面加载时显示的那样)。这是通过创建一个Image并重绘屏幕来完成的。

创建图像1->重绘->创建图像2->重绘->创建图像3 ->重绘->创建图像1 ->重绘->。

我注意到(使用wtk内存监视器)这消耗了太多未被垃圾回收的内存。

然后,我尝试创建一个类似于图像池的类。这个类创建所有的图像,然后显示它们。

create image 1 -> create image 2-> create image 3 -> repaint ->。

第二个场景似乎没有第一个场景消耗那么多内存。(使用wtk内存监视器)。

然而,我认为(不确定是否是这样)这两种方法都是导致这种OutOfMemoryException的原因。

EN

回答 6

Stack Overflow用户

发布于 2009-07-01 18:42:49

错误的原因是内存不足。很抱歉说出显而易见的事情,但您问:-)

需要一些源代码才能诊断出确切的问题。

您还应该查找正在进行递归方法调用或在循环内分配内存的代码部分。递归调用通常会生成一个StackOverflowException,但它值得一看。不过,在循环中分配内存很快就会导致OutOfMemoryError。

票数 2
EN

Stack Overflow用户

发布于 2011-03-07 18:25:43

你的OutOfMemoryException在移动设备上显示图像是由于堆中内存不足,这可以通过。以System.gc();身份运行垃圾收集器,但不幸的是,它在J2ME中不起作用。

因此,我们可以在这里使用

代码语言:javascript
复制
Runtime.getRuntime().gc();

而不是

代码语言:javascript
复制
System.gc();
票数 1
EN

Stack Overflow用户

发布于 2011-10-29 14:27:17

当模拟器中内存不足时,通常会出现此问题。

原因:

  1. 您使用的图像太多。
  2. 您初始化的对象太多。
  3. 您的设备内存不足。

解决方案:

  1. 您可以按降序加载您的镜像。
  2. 您可以使用gc()函数移除垃圾回收。
  3. 如果某些对象未被使用,则会将null分配给这些对象。
  4. 不会在循环中初始化对象。
  5. 请勿一次又一次地创建相同的镜像。如果你想使用同一张图片,只需引用同一张图片即可(如果你在不同的类中创建同一张图片,可能会出现这个问题)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1070675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档