On Wed, 30 Apr 2025 21:49:12 GMT, Chen Liang <li...@openjdk.org> wrote:
>> This is a general fix for all the "points to a static field that may hold a >> different value" failures related to `java/lang/invoke/MethodHandleImpl`. >> E.g., [JDK-8354840](https://bugs.openjdk.org/browse/JDK-8354840), >> [JDK-8353330](https://bugs.openjdk.org/browse/JDK-8353330). >> >> AOT-cached method handles quite often refer to the static fields in >> `MethodHandleImpl` or its inner classes. In the production run, if the value >> of these static field changes, we may have unexpected behavior related to >> identity of objects in these static fields. `CDSHeapVerifier` makes a very >> conservative check for such static fields, but sometimes gives false >> positives (as in the above two JBS issues) >> >> In this PR, we AOT-initialize `MethodHandleImpl` and its inner classes. This >> is a more authentic snapshot of the state of `java.lang.invoke` during the >> assembly phase. We also avoid the need to add and maintain entries in the >> `cdsHeapVerifier.cpp` table. >> >> I also added more code in `MethodHandleTest.java` to simulate potential >> usage patterns of `MethodHandle` by the Java core libraries. Hopefully this >> will reduce the likelihood for innocent core lib changes breaking the AOT >> assembly phase. > > src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java line 1533: > >> 1531: } >> 1532: >> 1533: private static void runtimeSetup() { > > Suggestion: > > > // Called from JVM when loading an AOT cache > private static void runtimeSetup() { Same problem in Reference, credit to @exe-boss ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24956#discussion_r2069844711