Я читал мышление главы java о сборщике мусора, и я узнал пример, который работает один раз на некоторое время. Но я не могу понять, почему.Пример сборщика мусора не содержит
public class Book {
boolean checkedOut = false;
Book(boolean checkOut) {
checkedOut = checkOut;
}
void checkIn() {
checkedOut = false;
}
@Override
protected void finalize() {
if (checkedOut) {
System.out.println("Error: checked out");
}
// Normally, you’ll also do this:
//super.finalize(); // Call the base-class version
}
public static void main(String[] args) {
Book novel = new Book(true);
// Proper cleanup:
novel.checkIn();
// Drop the reference, forget to clean up:
new Book(true);
// Force garbage collection & finalization:
System.gc();
}
}
Вызов System.gc()
должен заставить финализации объектов, даже если память не поджимает.
Таким образом, почему выходные программы Ошибка: выдан только после выполнения 4-5 подряд? я не могу понять, можете ли вы попытаться разъяснить это, пожалуйста? Я ожидаю, что каждый раз, когда GC называется методом finalize, выполняется также, поэтому каждый раз, когда ошибка проверки должна быть пропущена.
Thanks
Вопрос не ясен. Не могли бы вы объяснить, какое поведение вы ожидаете? –
Не пытайтесь заглянуть в ваш пример, но выполнение 'finalize' не гарантируется. –
yep извините, отредактированный. – LMG