java - 同一变量中类的多个实例化

标签 java null garbage-collection

我想知道如果我这样做的话垃圾回收会发生什么:

public class Ball {
    private int x;
    private int y;
    private int radius;
    // Constructors, getters and setters
}

public class BallClient {

   public static void main(String[] args) {
      Ball myball = new Ball();
      while(true) {
         myball = new Ball();
      }
   }

}

忽略无限循环。 Ball 在同一个变量上的多个实例是否会产生垃圾收集的开销?可以这样做还是编程不好?

我在一个方法上看到了这一点,该方法在应用程序的整个持续时间内调用以呈现图像,我无法回答这是否是一种不好的做法。

最佳答案

Would the multiple instantion of Ball on the same variable generate an overhead on the garbage collection?

GC 将不得不收集这些对象,是的。但这就是它的工作,并且它在收集短期对象方面非常有效(优化)。

Is it ok to do this or is it bad programming?

没关系。当然,根据实际用例、实际代码、类的实际设计,重用同一个球可能是更好的主意。但是创建生命周期短的对象并不是天生的坏习惯。事实上,这种情况一直在发生。

是否使用相同的变量不会有太大变化。但是,为了可读性和可维护性(不是性能,这很少是您应该担心的主要问题),变量的范围应该尽可能窄,并且它应该在循环内部而不是外部声明。

关于java - 同一变量中类的多个实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45115050/

相关文章:

java - Google drive rest API,仅从根文件夹下载文件

sql-server - PostgreSQL 和 SQL Server 中 "length/values"数据类型的默认 "bit"是什么

java - 通过方法推送对象时是否会创建对象的副本?

java - G1 GC什么时候会直接分配老年代的对象

android - 如何在android logcat中查看垃圾收集器日志

Java如何获取计时器停止时的时间?

java - 不重置的嵌套 While 循环的运行时间

java - i++ 或 i-- 在 for 循环中?

c# - 为什么我们不能在 C# 中执行 'if (object)' 来测试对象是否为空?

javascript - 为什么 0 和 null 用等于运算符表示 true 和 false?