Java (LIBGDX)如何清理我的应用程序使用的RAM内存?
我已经在libgdx中创建了一个游戏应用程序,它通常运行良好,但有时运行缓慢,我认为这是内存问题。我有一个扩展Game.class的主类,在主类中我创建了一个play screen类,当玩家死后,我再次创建play screen类。我相信内存没有释放的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
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;临时内存保持稳定。所以我想我已经解决了。谢谢