用于性能,静态类或常规对象创建

时间:2013-11-27 02:42:33

标签: java android

目前正在制作简单的Android SurfaceView基础游戏。有很多这样的电话:

mSplatGraphic[idx] = new Random().nextInt(SPLAT_COUNT);

我的问题是,拥有像这样的“静态随机类”会更好吗?

public class SysRandom {

    private static final Random RANDOM = new Random();

    public static int nextInt(int limit) {
         return RANDOM.nextInt(limit);
    }
}

然后使用此代码:

mSplatGraphic[idx] = SysRandom.nextInt(SPLAT_COUNT);

我的想法是,使用简单的类,Random对象只创建一次并且不会被不断地创建和销毁,但是我不确定这是在编译和运行代码后真正发生的事情。

这可能是一个java noob问题,对不起!我是自学成才的,如果有人给我指的是链接,我会很乐意删除这个问题:]

2 个答案:

答案 0 :(得分:0)

是的,它会更快,特别是如果将此代码放在循环中因为将创建对象,然后垃圾收集器必须立即收集它。将它放在自己的类中可以提高性能,但不是很大。 Android文档has a page非常适合这种情况。

答案 1 :(得分:0)

就个人而言,我不会使用您建议的任何一个选项。首先,每次需要随机数时都不需要创建新的随机数。这将导致大量不必要的垃圾收集,这会对fps产生负面影响。使用您的SysRandom包装器应该会有所帮助,但我不认为将它包装在该实用程序类中是必要的。就个人而言,我会宣布一个

private final Random rand = new Random()

位于班级顶部,使用mSplatGraphic。除非您静态访问rand,否则我不会将其设为静态。