Java 在垃圾收集器开始工作之前,我如何回收不再需要的对象?

Java 在垃圾收集器开始工作之前,我如何回收不再需要的对象?,java,garbage-collection,Java,Garbage Collection,我的老师让我下载一个2d游戏并提高应用程序的性能。现在我有点卡住了,我决定下载Jprofiler来检查游戏使用的内存等。我看到应用程序使用了大量的矩形,只有当garbace collector来做这件事时,它们才会被删除。我的问题是:有没有办法在GC出现之前去掉这些矩形?这是Jprofiler扫描的图片 精灵对象具有用于边界的矩形阵列列表 tileX = (int)xMap/tileXSize; tileY = (int)yMap/tileYSize; accurateX =

我的老师让我下载一个2d游戏并提高应用程序的性能。现在我有点卡住了,我决定下载Jprofiler来检查游戏使用的内存等。我看到应用程序使用了大量的矩形,只有当garbace collector来做这件事时,它们才会被删除。我的问题是:有没有办法在GC出现之前去掉这些矩形?这是Jprofiler扫描的图片

精灵对象具有用于边界的矩形阵列列表

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;
                }
            }
        }
tileX=(int)xMap/tileXSize;
tileY=(int)yMap/tileYSize;
accurateX=-(int)xMap%tileXSize;
准确度=-(int)yMap%tileYSize;

对于(inti=tileX;i,您可以通过分析代码的时间复杂性来提高性能。
在分析阶段之后,您可以尝试降低复杂性(如果可能)。您需要从指数时间复杂度转换为线性或对数。

有什么实际的性能问题?矩形在做什么,它们都可能与程序相关,不能收集!?可能的重复必须定义您的“性能”概念。垃圾收集器不会运行,因为剩余的未使用内存太多,拥有未使用的内存没有任何好处。这是一个很好的CPU消耗策略。垃圾收集器不运行时不会浪费CPU周期。当您希望应用程序消耗更少的内存时,可以设置上限,例如usi禁用
-Xmx
选项。然后,垃圾收集器将更频繁地运行,减少内存消耗,但提高CPU消耗。@JasperHeeren 100 MB的内存并不多,除非您在设备上运行。您可以使用池回收矩形,但可能不值得花费太多时间。2 GB值得在PC或服务器上花费大约1小时的时间。100 MB相当于3分钟。如前所述,分配/GC很可能不是问题所在。100 MB没有什么我想更改的;忘记内存,也许速度可以提高。碰撞检测算法(您没有向我们展示)可能是需要解决的问题。这只是半个答案。单独分析并不能提高性能