我有一个对象 (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/