java - Java 中创建其他对象的对象是否是糟糕的程序设计?

标签 java

我有一个对象 (Object1) 的实例,其构造函数创建其他对象 (Object2) 的实例并将它们存储在 ArrayList 中。 Object2 有一个静态instancecount 变量(以及其他静态变量),Object2 的实例依赖于此instancecount。在测试程序中,我运行一个 for 循环,其中每次迭代都会创建一个 Object1 实例,然后对 Object1 实例的引用重新分配一个空值。我的测试程序如下所示:

    for (...) {
        Object1 obj = new Object1(...); //which creates several Object2's
        obj.myMethod();
        obj = null;
    }

问题在于,Object2 的实例不会在每次循环迭代结束时进行垃圾回收,因此 Object2 的静态实例计数变量只会随着每次迭代而不断增长(连同内存使用量)。这是可以预料的吗?有没有办法强制清理 Object2 实例,以便每个循环都有一个新的开始?这是一个糟糕的程序设计吗?

谢谢! 瑞安

最佳答案

垃圾收集工作非常可靠,因此不会泄漏内存或无限期增长。

但是 GC 也仅在 JVM 认为需要时运行,因此您不能强制它在循环的每次迭代结束时运行。

拥有依赖于 GC 运行时间的代码是糟糕的代码。

此外,我不确定您如何管理实例计数。在构造函数中增加它很容易,但是什么时候再次减少它呢?这当然不会自动发生。

关于java - Java 中创建其他对象的对象是否是糟糕的程序设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337551/

相关文章:

java - 如何可视化 Swing 控件中的焦点?

java - org.simpleframework.xml.ElementMap 的正确用法?

java - 如何为静态 void 方法实现 doNothing() ?

java - Maven 依赖项到底是什么?

java - 在使用 MonoDroid 时是否可以使用用 Java 编写的自定义 android 小部件?

java - 如何在 Spring AspectJ 中使用 "declare"指令?

java - 使用 FileUpload 时嵌套表单上的 Wicket 口问题

java - 从文本字段字符串到整数

java - 如何创建第二个 "ActionListener"

Java将子类组织到不同的文件夹中