Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java (LIBGDX)如何清理我的应用程序使用的RAM内存?_Java_Android_Memory_Libgdx - Fatal编程技术网

Java (LIBGDX)如何清理我的应用程序使用的RAM内存?

Java (LIBGDX)如何清理我的应用程序使用的RAM内存?,java,android,memory,libgdx,Java,Android,Memory,Libgdx,我已经在libgdx中创建了一个游戏应用程序,它通常运行良好,但有时运行缓慢,我认为这是内存问题。我有一个扩展Game.class的主类,在主类中我创建了一个play screen类,当玩家死后,我再次创建play screen类。我相信内存没有释放的RAM内存,在多次死亡后它会积累,事实上,如果我在任务管理器打开的情况下运行应用程序,死亡增加内存也会增加 代码如下: public class MyGdxGame extends Game(){ private PlayScreen pl

我已经在libgdx中创建了一个游戏应用程序,它通常运行良好,但有时运行缓慢,我认为这是内存问题。我有一个扩展Game.class的主类,在主类中我创建了一个play screen类,当玩家死后,我再次创建play screen类。我相信内存没有释放的RAM内存,在多次死亡后它会积累,事实上,如果我在任务管理器打开的情况下运行应用程序,死亡增加内存也会增加

代码如下:

public class MyGdxGame extends Game(){
    private PlayScreen play_screen;  
    private SpriteBatch batch;
    public void create(){
    batch=new SpriteBatch();

    play_screen=new PlayScreen(this);

    setScreen(play_screen);

}

public void render(){

    if(play_screen.death==true){

        play_screen=new PlayScreen(this);

        setScreen(play_screen);

    }

}
所以我做了一个测试:

public void render(){

    do{
        play_screen=null;
        play_screen=new PlayScreen(this);
        setScreen(play_screen);
    }while(1!=2);
}

我在任务管理器打开的情况下运行应用程序,内存迅速增加,直到崩溃。那么如何清理RAM内存呢?

许多LibGDX对象都必须手动清除内存,请参阅。它们实现了具有dispose方法的接口

我没有看到您处理任何使用过的资源,您的SpriteBatch就是这些对象之一。 完成后,请调用batch.dispose。事后将其设置为null是可选的,但建议这样做,因为使用已处置的资源可能会导致意外行为。代码看起来像这样,当您不再需要它时,应该调用它:

if(batch != null) {
    batch.dispose();
    batch = null;
}

LibGDX内存泄漏几乎总是因为一个或多个资源未被释放

垃圾收集会释放和分配内存,而您无法访问它。您可以做的事情是在高级编程中管理RAM。您遗漏了太多代码,以至于无法确定问题可能是什么。1使用缩进代码行和代码块的逻辑和一致形式。缩进的目的是使代码的流程更易于遵循!大多数IDE都有专门用于格式化代码的键盘快捷键。2为了更快地得到更好的帮助,添加一个or。是的,这就是问题所在,现在我已经解决了。实际上,我做了一个测试,在MyGdxGame.render方法中,我输入了代码:play_screen=new playscreen this;因此,我不断创建新的play_screen对象,当我使用任务管理器运行时,我可以看到应用程序的临时内存增加了,而不是使用play_screen.dispose;临时内存保持稳定。所以我想我已经解决了。谢谢