RFR: 8311071: Avoid SoftReferences in LambdaFormEditor and MethodTypeForm when storing heap objects into AOT cache
Ioi Lam
iklam at openjdk.org
Tue Sep 17 23:57:15 UTC 2024
This is the 6th PR for [JEP 483: Ahead-of-Time Class Loading & Linking](https://bugs.openjdk.org/browse/JDK-8315737).
The implementation of java.lang.invoke uses SoftReferences so that unused MethodHandles, LambdaForms, etc, can be garbage collected.
However, if we want to store java.lang.invoke objects in the AOT cache ([JDK-8293336](https://bugs.openjdk.org/browse/JDK-8293336), the final step in JEP 493), it's difficult to cache these SoftReferences -- SoftReferences in turn point to ReferenceQueues, etc, which have dependencies on the current execution state (Threads, etc) which are difficult to cache.
The proposal is to add a new flag: `MethodHandleStatics.NO_SOFT_CACHE`. When this flag is true, we avoid using SoftReferences, and store a direct reference to the target object instead.
[JDK-8293336](https://bugs.openjdk.org/browse/JDK-8293336) stores only java.lang.invoke objects that refer to classes loaded by the boot/platform/app loaders. These classes are never unloaded, so it's not necessary to point to them using SoftReferences.
This RFE modifies only the LambdaFormEditor and MethodTypeForm classes, as that's the minimal modification required by [JDK-8293336](https://bugs.openjdk.org/browse/JDK-8293336).
---
See [here](https://bugs.openjdk.org/browse/JDK-8315737) for the sequence of dependent RFEs for implementing JEP 483.
-------------
Depends on: https://git.openjdk.org/jdk/pull/20959
Commit messages:
- Do not use system property to limit usage to only CDS static dumps
- Merge branch 'jep-483-step-05-8293337-archive-method-handle-intrinsics' of /jdk3/yam/open into jep-483-step-06-8311071-avoid-soft-refs-in-java-lang-invoke
- Merge branch 'jep-483-step-05-8293337-archive-method-handle-intrinsics' of /jdk3/yak/open into jep-483-step-06-8311071-avoid-soft-refs-in-java-lang-invoke
- Merge branch 'jep-483-step-05-8293337-archive-method-handle-intrinsics' of /jdk3/yak/open into jep-483-step-06-8311071-avoid-soft-refs-in-java-lang-invoke
- 8311071: Add an option to avoid using SoftReferences in java.lang.invoke.MethodHandle
Changes: https://git.openjdk.org/jdk/pull/21049/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21049&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8311071
Stats: 72 lines in 4 files changed: 46 ins; 2 del; 24 mod
Patch: https://git.openjdk.org/jdk/pull/21049.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/21049/head:pull/21049
PR: https://git.openjdk.org/jdk/pull/21049
More information about the core-libs-dev
mailing list