我的老师给了我任务,可以下载2D游戏并改善应用程序的性能。现在我有点卡住了,我决定下载Jprofiler来检查游戏使用的内存等。我看到该应用程序正在使用大量矩形,并且只有当垃圾收集器出现时它们才会被删除。我的问题是:有没有办法在GC出现之前摆脱这些矩形?这是Jprofiler扫描的图片。
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;
}
}
}
答案 0 :(得分:1)
您可以通过分析代码的时间复杂度来提高性能。 在分析阶段之后,您可以尝试降低复杂性(如果可能)。您需要从指数时间复杂度变为线性或对数。