publicclass FinalizeOverride { // finalizedCount is incremented when the finalize method is invoked privatestatic AtomicInteger finalizedCount = new AtomicInteger();
// finalizedSum and privateFinalizedInvoke are used to verify // the right overrided finalize method is invoked privatestatic AtomicInteger finalizedSum = new AtomicInteger(); privatestaticvolatileboolean privateFinalizeInvoked = false;
staticvoid test(Object o, int expected) { int count = finalizedCount.get(); int sum = finalizedSum.get();
privateFinalizeInvoked = false;
// force GC and finalization
o = null; while (finalizedCount.get() != (count+1)) {
System.gc();
System.runFinalization(); // Running System.gc() and System.runFinalization() in a // tight loop can trigger frequent safepointing that slows // down the VM and, as a result, the test. (With the // HotSpot VM, the effect of frequent safepointing is // especially noticeable if the test is run with the // -Xcomp flag.) Sleeping for a second after every // garbage collection and finalization cycle gives the VM // time to make progress. try { Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Main thread interrupted, continuing execution.");
}
}
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.