publicclass Main { publicstaticvoid main(String[] args) {
System.loadLibrary(args[0]); int initialSize = monitorListSize();
IdentityHashMap<Object, Integer> all = new IdentityHashMap(); for (int i = 0; i < 5000; ++i) {
Object obj = new Object(); synchronized(obj) { // Should force inflation.
all.put(obj, obj.hashCode());
}
} // Since monitor deflation is delayed significantly, we believe that even with an intervening // GC, monitors should remain inflated. We allow some slop for unrelated concurrent runtime // actions. int inflatedSize = monitorListSize(); if (inflatedSize >= initialSize + 4000) {
System.out.println("Monitor list grew by at least 4000 monitors");
} else {
System.out.println("Monitor list did not grow as expected");
} // Encourage monitor deflation. // trim() (Heap::Trim()) deflates only in JANK_IMPERCEPTIBLE state. // Some of this mirrors code in ActivityThread.java. finalint DALVIK_PROCESS_STATE_JANK_PERCEPTIBLE = 0; finalint DALVIK_PROCESS_STATE_JANK_IMPERCEPTIBLE = 1;
VMRuntime.getRuntime().updateProcessState(DALVIK_PROCESS_STATE_JANK_IMPERCEPTIBLE);
System.gc();
System.runFinalization();
trim();
VMRuntime.getRuntime().updateProcessState(DALVIK_PROCESS_STATE_JANK_PERCEPTIBLE); int finalSize = monitorListSize(); if (finalSize > initialSize + 1000) {
System.out.println("Monitor list failed to shrink properly");
} else {
System.out.println("Monitor list shrank correctly");
} int j = 0; for (Object obj: all.keySet()) {
++j; if (obj.hashCode() != all.get(obj)) { thrownew AssertionError("Failed hashcode test!");
}
}
System.out.println("Finished first check"); for (Object obj: all.keySet()) {
++j; synchronized(obj) { if (obj.hashCode() != all.get(obj)) { thrownew AssertionError("Failed hashcode test!");
}
}
}
System.out.println("Finished second check");
System.out.println("Total checks: " + j);
}
privatestaticnativevoid trim();
privatestaticnativeint monitorListSize();
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-29)
¤
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.