publicstaticvoid main(String... args) { // Negative test boolean finalized = false; for (int c = 0; !finalized && c < MAIN_ITERS; c++) {
finalized |= nonFenced();
}
if (PREMATURE_FINALIZATION && !finalized) { thrownew IllegalStateException("The object had never been finalized before timeout reached.");
}
if (!PREMATURE_FINALIZATION && finalized) { thrownew IllegalStateException("The object had been finalized without a fence, even though we don't expect it.");
}
if (!PREMATURE_FINALIZATION) return;
// Positive test
finalized = false; for (int c = 0; !finalized && c < MAIN_ITERS; c++) {
finalized |= fenced();
}
if (finalized) { thrownew IllegalStateException("The object had been prematurely finalized.");
}
}
publicstaticboolean nonFenced() {
AtomicBoolean finalized = new AtomicBoolean();
MyFinalizeable o = new MyFinalizeable(finalized);
for (int i = 0; i < LOOP_ITERS; i++) { if (finalized.get()) break; if (i > WARMUP_LOOP_ITERS) {
System.gc();
System.runFinalization();
}
}
return finalized.get();
}
publicstaticboolean fenced() {
AtomicBoolean finalized = new AtomicBoolean();
MyFinalizeable o = new MyFinalizeable(finalized);
for (int i = 0; i < LOOP_ITERS; i++) { if (finalized.get()) break; if (i > WARMUP_LOOP_ITERS) {
System.gc();
System.runFinalization();
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.