在我的Java书中,有一个练习要求你:“分配10000个Rational对象而不将它们保存在变量中,它们就变成了垃圾。”
低于正确的方式分配对象而不将它们分配给变量?
for (int i = 0; i < 10000; i++) {
new Rational();
}
由于
答案 0 :(得分:2)
这是正确的,每个Rational
都是在没有引用的情况下实例化的,因此在某些时候会被垃圾收集。 Java无法强制进行垃圾回收,但您可以调用Runtime.gc()
来请求垃圾回收。
答案 1 :(得分:1)
是的,只要构造函数没有副作用,例如保留引用。
class Rational {
static final List<Rational> IRRATIONAL = new ArrayList<Rational>();
Rational() {
IRRATIONAL.add(this);
}
static Iterable<Rational> allRationals() {
return IRRATIONAL;
}
}
for (int i = 0; i < 10000; i++) {
new Rational();
}
for(Rational r: Rational.allRationals()) {
// all still here
}