Memory management Java使我内存不足

Memory management Java使我内存不足,memory-management,java-me,Memory Management,Java Me,我正在为Symbian S60第5版制作一个Java ME应用程序,内存有问题。运行应用程序一段时间后,我收到内存不足异常。 我正在从谷歌地图(通过诺基亚5800中的内置GPS)获取图像并显示它们 我已经这样实现了: 使用方法setForm() 类Data具有一个线程,该线程收集有关坐标的信息,从Google maps获取图像,创建新表单,附加图像,并从Midlet调用方法setForm(f) 很可能,Display.setCurrent(Form f)会在表单上保留引用,这样内存就会很快被

我正在为Symbian S60第5版制作一个Java ME应用程序,内存有问题。运行应用程序一段时间后,我收到内存不足异常。 我正在从谷歌地图(通过诺基亚5800中的内置GPS)获取图像并显示它们

我已经这样实现了:

  • 使用方法
    setForm()
  • Data
    具有一个线程,该线程收集有关坐标的信息,从Google maps获取图像,创建新表单,附加图像,并从
    Midlet
    调用方法
    setForm(f)
很可能,
Display.setCurrent(Form f)
会在表单上保留引用,这样内存就会很快被填满。 我尝试了
Canvas
,但它有一些愚蠢的UI(一些圆圈和一些4个按钮),我不喜欢

我怎样才能解决这个问题

附:代码

  • 上课时
    MIDlet

    public void setInfo(Form f)
    {
        getDisplay().setCurrent(f);
    }
    
  • 在类
    TouristData
    中,它收集有关位置的信息并获取地图图像

    private attributes:
        private Form f=null;
        private ImageItem imageItem=null;
        private Image img = null;
    
  • 方法
    locationUpdated
    ,接收新位置时调用该方法:

    public void locationUpdated(LocationProvider provider,final Location location)
    {
        if (!firstLocationUpdate)
        {
            firstLocationUpdate = true;
            statusListener.firstLocationUpdateEvent();
        }
    
        if(touristUI != null)
        {
            new Thread()
            {
                public void run()
                {
                    if(location != null && location.isValid())
                    {
                        //lokacija je, prikaži!
                        try
                        {
                            QualifiedCoordinates coord =location.getQualifiedCoordinates();
                            if(imageItem == null)
                            {
                                imageItem = new ImageItem(null,null,0,null);
                                imageItem.setAltText("ni povezave");
                                f.append(imageItem);
                            }
                            else
                            {
                                img =  googleConnector.retrieveStaticImage2(360,470, coord.getLatitude(), coord.getLongitude(), 16, "png32"); //z markerje
                                imageItem.setImage(img);
                            }
                        }catch(Exception e)
                        {}
                    }
                    else
                    {
                    }
                }
            }.start();
        }
    }
    

  • 您是否保留对表单或图像的引用?这将防止它们被垃圾收集,并会导致内存不足错误


    没有一些源代码很难说。无论如何,最好重新设计Midlet,不要创建新表单,而是重复使用相同的表单。

    是否保留对表单或图像的引用?这将防止它们被垃圾收集,并会导致内存不足错误


    没有一些源代码很难说。无论如何,最好重新设计你的Midlet,不要创建新的表单,而是重复使用相同的表单。

    我也有类似的问题,我的软件在Palm T3上运行,所以我的结论是,我可以通过积极地使用资源来延长应用程序的生命,所有不需要的变量=null all vector.clear(),当不需要时。。。虚拟机是IBMJ9,这一点都不严重,但它以某种方式发挥了作用。问题解决了。我发现它可能是画布上的虚拟键盘,所以我使用了画布,并且我还将所有引用放在mapImage=null上。所以现在一切都好了。感谢大家的帮助,Milan DojčinovskiI也遇到了类似的问题,我的软件在Palm T3上运行,所以我的结论是,我可以通过积极使用资源来延长应用程序的使用寿命,所有不需要的变量=null all vector.clear()当不需要时。。。虚拟机是IBMJ9,这一点都不严重,但它以某种方式发挥了作用。问题解决了。我发现它可能是画布上的虚拟键盘,所以我使用了画布,并且我还将所有引用放在mapImage=null上。所以现在一切都好了。感谢大家的帮助,米兰·多吉诺夫斯基