On Tue, 28 Jan 2025 19:14:56 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:
> DeoptimizeObjectsALotThread was being unconditionally added to the mapping > table: > > virtualConstructor.addMapping("DeoptimizeObjectsALotThread", > DeoptimizeObjectsALotThread.class); > > But is conditionally included in VMStructs: > > DEBUG_ONLY(COMPILER2_OR_JVMCI_PRESENT( \ > declare_type(DeoptimizeObjectsALotThread, JavaThread))) \ > > There is code that iterates over all the mapping table entries and calls > db.lookupType() on each. This results in a RuntimeException if the type is > not present in the type database: > > Caused by: java.lang.RuntimeException: No type named > "DeoptimizeObjectsALotThread" in database > > The fix is to not add it to the mapping table if it is not present in the > database. > > Testing is in progresses. I did test locally with a debug build using > TEST_VM_OPTS=-XX:+DeoptimizeObjectsALot to make sure the original > DeoptimizeObjectsALotThread issue is still fixed, and then tested a release > build without TEST_VM_OPTS=-XX:+DeoptimizeObjectsALot to make sure this new > issue did not reproduce. Looks fine, but I have a minor suggestion: src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Threads.java line 161: > 159: /* Only add DeoptimizeObjectsALotThread if it is actually > present in the type database. */ > 160: try { > 161: db.lookupType("DeoptimizeObjectsALotThread"); I see there is `public Type lookupType(String cTypeName, boolean throwException);`, so this might be more accurately, without over-catching the exceptions: if (db.lookupType("DeoptimizeObjectsALotThread", false) != null) { virtualConstructor.addMapping("DeoptimizeObjectsALotThread", DeoptimizeObjectsALotThread.class); } ? ------------- PR Review: https://git.openjdk.org/jdk/pull/23339#pullrequestreview-2579255107 PR Review Comment: https://git.openjdk.org/jdk/pull/23339#discussion_r1932761452