Memory leaks 为什么Libgdx不断增加堆?

Memory leaks 为什么Libgdx不断增加堆?,memory-leaks,libgdx,heap,Memory Leaks,Libgdx,Heap,为什么堆会毫无理由地堆起来?如果你说使用gc,我仍然想知道为什么会上升? 这是我的密码: public class GameCore extends ApplicationAdapter { SpriteBatch batch; Texture texture; StopWatch sw = new StopWatch(); long current, held; @Override public void create() {

为什么堆会毫无理由地堆起来?如果你说使用gc,我仍然想知道为什么会上升?

这是我的密码:

public class GameCore extends ApplicationAdapter {
    SpriteBatch batch;
    Texture texture;
    StopWatch sw = new StopWatch();
    long current, held;

    @Override
    public void create() {
        batch = new SpriteBatch();
        texture = new Texture(Gdx.files.internal("badlogic.jpg"));
        sw.start();
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(texture, 0, 0);
        batch.end();

        if (Gdx.app.getJavaHeap() > held) {
            current = Gdx.app.getJavaHeap();
            held = current;
            String f = "UP: " + Mis.formatMilliseconds(sw.getCurrent()) + "\t"
                    + Mis.ramStatistics(Mis.BYTE_TO_MB_FACTOR, true) + "\t, byGdx:" + Gdx.app.getJavaHeap();
            System.out.println(f);
        } else if (Gdx.app.getJavaHeap() < held) {
            // if gc worked
            held = current;
            String f = "DOWN: " + Mis.formatMilliseconds(sw.getCurrent()) + "\t"
                    + Mis.ramStatistics(Mis.BYTE_TO_MB_FACTOR, true) + "\t, byGdx:" + Gdx.app.getJavaHeap();
            System.out.println(f);
        }
    }

    @Override
    public void dispose() {
        batch.dispose();
    }
}
在增加56分钟(高达34mb)、gc清理(26mb)之后,libgdx再次开始增加堆大小,没有任何特殊原因


促使我问这个问题的是一个非常小的游戏只有2个纹理,libgdx在2分钟内产生了66mb的内存,我认为我使用libgdx是错误的,但我不是。

Java是一种托管语言,这意味着它(JVM/GC)为您管理内存。因此,除非您有实际问题(例如,内存不足),否则仅根据总体内存使用情况添加任何结论通常不是很有用。众所周知,JVM/GC可能从未发布过任何(临时)对象,只是因为没有理由这么做


如果您认为内存使用过多(例如,内存不足)确实会导致问题,那么最好使用探查器来查看实际情况。但从您的描述来看,似乎您没有实际问题。

您是否一直在将对象加载到内存中?Ie每帧加载一个图像?不,我没有,因为你看不到任何东西,除了那里有什么。如果没有条件限制多次创建,你的答案会有意义。我不知道你的意思,你能重新表述你的问题吗?堆大小增量发生在if语句之前,指责字符串或任何其他对象的创建毫无意义,实际上创建的字符串总数是13个,我不认为13个字符串会滥用heap sizeOw,我明白你的意思。我已经从答案中删除了这个例子。
UP: 1 ms    Heap: (11/1796) MB, 0.59153545% , byGdx:11140048
UP: 58 sec, 58171 ms    Heap: (12/1796) MB, 0.62772965% , byGdx:11821672
UP: 1 min, 111 sec, 111705 ms   Heap: (12/1796) MB, 0.66392213% , byGdx:12503264
UP: 32 min, 1978 sec, 1978210 ms    Heap: (25/1796) MB, 1.3516115%  , byGdx:25454120
UP: 48 min, 2887 sec, 2887645 ms    Heap: (31/1796) MB, 1.6773589%  , byGdx:31588736