Android Studio Libgdx Problemas de memoria
Tengo algunos problemas con mi aplicación. A veces se retrasa y me da "GC_CONCURRENT liberado". Yo uso MAT para mirar lo que consume tanta memoria y descubrí que una lista de objetos come mucha memoria. El problema es que tengo bloques en mi juego y necesito ver si mi jugador los pasos en ellos así que por eso estoy usando esta lista. Actualmente tengo 200 bloques, pero tendré mucho más y no creo que deberían usar tanta memoria, ¿qué puedo hacer para solucionar el problema? Así es como se ve la clase de bloque:
package com.NeverMind.DontFall.android; import android.util.Log; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; /** * Created by user on 20-Aug-15. */ public class blockClass { private SpriteBatch spriteBatch; public float x, y, sizeX = 100, sizeY = 100, startTime; private boolean isTouched = false; private Texture texture; Sprite blockSprite; public blockClass(float sentX, float sentY, Texture sentTexture, float scaleX, float scaleY){ x = sentX; y = sentY; sizeY *= scaleY; sizeX *= scaleX; spriteBatch = new SpriteBatch(); texture = sentTexture; blockSprite = new Sprite(texture); startTime = System.currentTimeMillis(); } public void draw(float cameraX, float cameraY) { spriteBatch.begin(); spriteBatch.draw(blockSprite, x + cameraX, y + cameraY, sizeX, sizeY); spriteBatch.end(); } public void update(float posX, float posY, boolean immune){ if (isTouched == false && immune == false) if (touched(posX, posY) ) isTouched = true; if (isTouched == true) { y -= 10; } } public boolean touched (float posX, float posY) { if (posX >= x && posX < x + sizeX && posY == y + sizeY) return true; return false; } public boolean toKill (float posY){ if (isTouched && y < posY - 1000) return true; return false; } }
- Android - recuperarse de una condición de memoria baja
- El objeto de conexión de SQLite se filtró - Android
- Cómo evitar la pérdida de memoria en context.getSystemService (Context.CAMERA_SERVICE)?
- ¿Cuándo es exactamente seguro usar clases anónimas internas?
- Android java.lang.OutOfMemoryError?
- No se puede asignar suficiente memoria en JNI
- Android GLSurfaceView provoca fugas?
- Android - view.Surface OutOfResourcesException
- Limpiar la memoria del montón para Excepción de memoria perdida
- Memoria liberada del colector de basura de Android
- Bitmap recycle () en java Android
- Pérdida de memoria causada por el método initialize de YouTubePlayer.Provider
- Comprensión onTrimMemory (nivel int)
GC_CONCURRENT freed
significa que se llama Garbage Collector, debido a objetos que matan (por ejemplo, asignar null
a ellos).
Hay un concepto llamado Object Pooling , reutiliza el objeto muerto en lugar de matarlo y obtener el objeto de la agrupación en lugar de crear uno nuevo, por lo que no tiene GC llamadas y de forma similar no GC_CONCURRENT freed
.