Как я могу утилизировать объекты, которые больше не нужны, прежде чем сборщик мусора вступит в действие? - PullRequest
0 голосов
/ 05 ноября 2018

Мой учитель дал мне задание загрузить 2d игру и улучшить производительность приложения. Теперь я немного застрял и решил загрузить Jprofiler, чтобы проверить память, используемую игрой и т. д. Я увидел, что приложение использует тонну прямоугольников и что они удаляются только тогда, когда сборщик мусора приходит и делает свое дело. Мой вопрос: есть ли способ избавиться от этих прямоугольников, прежде чем GC появится? Вот изображение сканирования Jprofiler.

Jprofiler Scan

Объект Sprite имеет ArrayList прямоугольников для границ.

tileX = (int)xMap/tileXSize;
    tileY = (int)yMap/tileYSize;
    accurateX = -(int)xMap%tileXSize;
    accurateY = -(int)yMap%tileYSize;
    for (int i=tileX; i<tileX+displayX+1 && i<sizeX; i++) {
        for (int j=tileY; j<tileY+displayY+1 && j<sizeY; j++) {
            Sprite s = spriteMap[j][i];
            if (s != null) {
                s.act();
                // Colisones con los objetos de al lado
                if (inMap(i+1,j) && spriteMap[j][i+1] != null) {
                    if (s.collidesWith(spriteMap[j][i+1], false)) {
                        s.collision(spriteMap[j][i+1]);
                        spriteMap[j][i+1].collision(s);
                    }
                }
                if (inMap(i,j+1) && spriteMap[j+1][i] != null) {
                    if (s.collidesWith(spriteMap[j+1][i], false)) {
                        s.collision(spriteMap[j+1][i]);
                        spriteMap[j+1][i].collision(s);
                    }
                }
                if (inMap(i+1,j+1) && spriteMap[j+1][i+1] != null) {
                    if (s.collidesWith(spriteMap[j+1][i+1], false)) {
                        s.collision(spriteMap[j+1][i+1]);
                        spriteMap[j+1][i+1].collision(s);
                    }
                }
                if (s.isToDelete()) {
                    spriteMap[j][i] = null;
                }
            }
        }

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете улучшить производительность, анализируя временную сложность вашего кода. После фазы анализа вы можете попытаться уменьшить сложность (когда это возможно). Вам нужно перейти от экспоненциальной сложности времени к линейной или логарифмической.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...