我如何在垃圾收集器起作用之前回收不再需要的对象?

25 浏览
0 Comments

我如何在垃圾收集器起作用之前回收不再需要的对象?

我的老师让我下载一个2D游戏并提高应用程序的性能。现在我有点卡住了,决定下载Jprofiler来检查游戏使用的内存等。我发现该应用程序正在使用大量的矩形,并且只有当垃圾收集器出现并完成工作后才会被删除。我的问题是:是否有办法在垃圾收集器出现之前摆脱这些矩形?这里是Jprofiler扫描的图片。

Jprofiler扫描

Sprite对象具有Rectangle范围的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;
                }
            }
        }

admin 更改状态以发布 2023年5月21日
0
0 Comments

通过分析代码的时间复杂度,您可以改善性能。

在分析阶段结束后,您可以尝试降低复杂度(如果可能的话)。您需要从指数时间复杂度转变为线性或对数的复杂度。

0