// to prevent the compiler to optimize away all unread writes publicstatic TestClassLoader firstClassLoader; publicstatic TestClassLoader secondClassLoader;
publicstaticvoid main(String... args) throws Exception {
firstClassLoader = new TestClassLoader(); // define a class using a class loader under a recording Class<?> clz = recordClassDefinition(firstClassLoader);
JVM jvm = JVM.getJVM(); // we will now tag the defined and loaded clz as being in use (no recordings are running here)
jvm.getClassId(clz); // null out for unload to occur
firstClassLoader = null;
clz = null; // provoke unload
System.gc(); // try to define another class _with the same name_ using a different class loader
secondClassLoader = new TestClassLoader(); // this will throw a NPE for 8231081 because it will reuse the same class name // that symbol was marked as already serialized by the unload, but since no recordings were running // it was not written to any chunk. This creates a reference to a non-existing symbol, leading to an NPE (no symbol at the expected location).
recordClassDefinition(secondClassLoader);
}
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.