java - 创建返回类型的静态实例变量

标签 java performance

我有一个大约以 60 fps 运行的游戏循环。在每次迭代中,我需要从我的实用程序类Physics中调用一堆方法。看起来像这样

public final class Physics {

    private static final float G = 9.81f;
    private static Vector2D var1 = new Vector2D();

    private Physics() {
    }

    public static Vector2D method1(param1, param2, param3) {
        /*
         * Do some computations with param1, param2 and param3, 
         * then assign the result to var1
         */
        return var1;
    }
}

这种设计模式的优点和缺点是什么?像我在上面的代码中所做的那样使用 var1 作为辅助实例变量是否很好,因为如果我将它放在 method1() 中就像下面这样

    public static Vector2D method1(param1, param2, param3) {
        Vector2D var1 = new Vector2D();
        /*
         * Do some computations with param1, param2 and param3, 
         * then assign the result to var1
         */
        return var1;
    }

每秒我都会获得 60 个 Vector2D 类型的新对象我想避免垃圾收集。

最佳答案

我总是尝试最小化变量范围(为了可读性),除非有充分的理由不这样做或者有显着的性能优势。在这种情况下,我假设 Vector2D 不会使用太多开销,并且创建静态变量的性能优势可能可以忽略不计。

因此,如果您不打算从 method1 之外的其他地方访问 var1,我会推荐您的第二种设计模式。如果可能的话,您不必在方法内声明变量,如下所示:

public static Vector2D method1(param1, param2, param3) {
    // Do some computations, compute x and y, then assign the result to var1
    return new Vector2D(x, y);
}

归根结底,这是个人品味的问题。

关于java - 创建返回类型的静态实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300423/

相关文章:

performance - std::optional <T>的开销?

performance - 返回地址预测堆栈缓冲区与堆栈存储的返回地址?

mysql - 在 rake db :migrate 上的多个数据库上运行相同的迁移

java - 如何使用 maven-plugin-plugin 生成 Fat Maven 插件?

java - Gradle构建没有类的jar

java - 有没有办法在 Java Swing 中存储同时单击的每个标签的名称?

mysql - 为什么 COUNT() 从大表查询比 SUM() 快得多

java - Web 服务不会减去字符串中的时间

java - 在android中启动asynctask时出错

git - Git 如何既节省空间又快速?