Java LibGDX 内存泄漏

Java LibGDX memory leak

我们正在为我们的学校作业制作一个 2D 俯视射击游戏。但是我们 运行 遇到了一个我们无法解决的问题。我们接收玩家并希望渲染他们。当我们评论给定的代码时,延迟消失了,RAM 使用稳定了。但是,当我们留下零件时,ram 将每秒增加 50 MB/s。

我们找不到此代码中的错误,如果您知道什么请告诉我们。 如果您需要更多信息,请告诉我,我会尽快回复他们。

            List<SimplePlayer> localMultiplayers = new ArrayList(this.multiplayers);
            this.multiplayers.clear();
            for (SimplePlayer splayer : localMultiplayers) {
                try {
                    Player p = new Player(splayer, this);
                    batch.setProjectionMatrix(game.camera.combined);
                    batch.begin();
                    p.render(batch);   
                    this.fontwhite.draw(batch, splayer.getName(), splayer.getX(), splayer.getY() + 76);
                    this.fontred.draw(batch, Integer.toString(splayer.getHitPoints()), splayer.getX() + 12, splayer.getY() + 64);
                    batch.end();
                } catch (Exception ex) {
                Logger.getLogger(GameScreen.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

编辑:这段代码在我们的 GameScreen.render() 中找到,我们不知道这是否是问题所在。

Guido,不是开玩笑,它泄漏了 :-)。每个渲染周期(每秒大约 60 次),您都在为每个客户端创建新的 Player 实例(我只能假设)其中有某种纹理。如果您不想再使用它,则必须调用 Texture.dispose() - 否则它会泄漏。

解决方法是单独创建玩家列表(add/remove 玩家,因为他们 join/leave 游戏)并继续调用他们的渲染方法而不创建新实例。