On Tue, 28 Jan 2025 19:14:56 GMT, Chris Plummer <[email protected]> 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