我正在阅读 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 方法,因此每次都应该提示检出错误。
谢谢