왜 힙이 아무런 이유없이 올라간다. gc를 사용했다면 왜 계속 올라갈 지 궁금 할 것입니다.Libgdx가 지속적으로 증가하는 이유는 무엇입니까?
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();
}
}
불행한 결과 : 여기
내 코드입니다
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
(34메가바이트까지) 증가 분 56 후, GC 정리 (26메가바이트), libgdx 다시 시작 특별한 이유없이 힙 크기를 늘립니다.
이 질문을하는 것은 아주 작은 게임인데, libgdx는 2 분 안에 66MB를 발생 시켰고, 나는 libgdx를 잘못 사용하고 있다고 생각했지만, 그렇지 않았습니다.
개체를 메모리에 지속적으로로드하고 있습니까? 프레임마다 이미지를로드하고 있습니까? –
아니, 거기에있는 것 외에는 아무것도 볼 수 없기 때문에. – user3843006