Проблемы с памятью Studio Studio Libgdx

У меня проблемы с моим приложением. Иногда он отстает и дает мне «GC_CONCURRENT освобожден». Я использую MAT, чтобы посмотреть, что потребляет столько памяти, и я узнал, что список объектов съедает много памяти. Проблема в том, что у меня есть блоки в моей игре, и мне нужно посмотреть, работает ли мой игрок, поэтому я использую этот список. В настоящее время у меня есть 200 блоков, но у меня будет гораздо больше, и я не думаю, что они должны использовать столько памяти, что я могу сделать, чтобы исправить эту проблему? Так выглядит класс блока:

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; } } 

GC_CONCURRENT freed означает, что вызывается сборщик мусора из-за уничтожения объектов (например, присваивать им null ).

Существует концепция, называющая Object Pooling , она повторно использует мертвый объект, а не убивает его и получает объект из пула вместо создания нового. Таким образом, у вас нет вызовов GC, и аналогичным образом не GC_CONCURRENT freed .

Intereting Posts
Как получить потоковое видео MJPG от android IPWebcam с помощью opencv Полноэкранное видео без разрыва Формат Проверить приложение Android на переднем плане или нет? SQLiteDatabase: Вставить только в том случае, если значение не существует (не через команду raw SQL) Android: Можете ли вы отправлять / получать данные по телефонной линии? Доступ к внешней SD-карте от встроенного кода SparseBooleanArray.equals () не работает должным образом Настроить Android Talkback в диалоге оповещений? SQL-запрос Query с несколькими условиями Проверьте, существует ли файл на SD-карте на Android Android: как удалить кнопку «Назад / Дом» в панели действий Можно ли измерить расстояние до объекта с помощью камеры? Обратный вызов предварительного просмотра камеры Android и видеозапись записи рекордов мультимедиа Отображение экрана настройки только при первом запуске в android Как начать новую деятельность с использованием ожидающего намерения