繁体   English   中英

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

[英]for performace, static class or regular object creation

当前正在制作一个简单的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问题,对不起! 如果有人将我指向链接,我很自学,很乐意删除这个问题:]

是的,这样会更快,特别是如果将这些代码放在循环中,因为将创建对象,然后垃圾收集器必须立即收集它。 将其放在自己的类中会提高性能,尽管幅度不是很大。 Android文档中有一个非常适合这种情况的页面

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

private final Random rand = new Random()

在使用mSplatGraphic的类的顶部。 除非您静态访问rand ,否则我不会使其静态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM