publicclass OOMEInReferenceHandler { static Object[] fillHeap() {
Object[] first = null, last = null; int size = 1 << 20; while (size > 0) { try {
Object[] array = new Object[size]; if (first == null) {
first = array;
} else {
last[0] = array;
}
last = array;
} catch (OutOfMemoryError oome) {
size = size >>> 1;
}
} return first;
}
publicstaticvoid main(String[] args) throws Exception { // preinitialize the InterruptedException class so that the reference handler // does not die due to OOME when loading the class if it is the first use
InterruptedException ie = new InterruptedException("dummy");
// wait at most 10 seconds for success or failure for (int i = 0; i < 20; i++) { if (refQueue.poll() != null) { // Reference Handler thread still working -> success return;
}
System.gc(); Thread.sleep(500L); // wait a little to allow GC to do it's work before allocating objects if (!referenceHandlerThread.isAlive()) { // Reference Handler thread died -> failure thrownew Exception("Reference Handler thread died.");
}
}
// no sure answer after 10 seconds thrownew IllegalStateException("Reference Handler thread stuck. weakRef.get(): " + weakRef.get());
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.8 Sekunden
(vorverarbeitet am 2026-06-10)
¤
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.