私のJavaの本には、「変数に保存せずに10000個のRationalオブジェクトをガベージになるように割り当てる」という演習があります。
オブジェクトを変数に割り当てずに割り当てる正しい方法は以下ですか?
for (int i = 0; i < 10000; i++) {
new Rational();
}
ありがとう
私のJavaの本には、「変数に保存せずに10000個のRationalオブジェクトをガベージになるように割り当てる」という演習があります。
オブジェクトを変数に割り当てずに割り当てる正しい方法は以下ですか?
for (int i = 0; i < 10000; i++) {
new Rational();
}
ありがとう
そうです、それぞれRational
は参照なしでインスタンス化されるため、その後、ある時点でガベージコレクションされます。Javaにはガベージコレクションを強制する方法はありませんが、呼び出すRuntime.gc()
ことでガベージコレクションを要求できます。
コンストラクターに参照の保持などの副作用がない場合は、Trueです。
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
}