On Wed, 2 Oct 2024 01:06:20 GMT, Ioi Lam <[email protected]> wrote:
>> 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.
>
> Ioi Lam has updated the pull request with a new target base due to a merge or
> a rebase. The incremental webrev excludes the unrelated changes brought in by
> the merge/rebase. The pull request contains 13 additional commits since the
> last revision:
>
> - 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/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/yam/open into
> jep-483-step-06-8311071-avoid-soft-refs-in-java-lang-invoke
> - @liach and @cl4es comments
> - 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
> - @dholmes-ora review comments
> - 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/yam/open into
> jep-483-step-06-8311071-avoid-soft-refs-in-java-lang-invoke
> - 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
> - ... and 3 more: https://git.openjdk.org/jdk/compare/bad1f0b3...1b067b7b
Overall, looks good.
src/java.base/share/classes/java/lang/invoke/MethodHandleStatics.java line 92:
> 90: CUSTOMIZE_THRESHOLD = Integer.parseInt(
> 91:
> props.getProperty("java.lang.invoke.MethodHandle.CUSTOMIZE_THRESHOLD",
> "127"));
> 92: NO_SOFT_CACHE = CDS.disableMethodHandleSoftCache();
I suggest to use `CDS.disableMethodHandleSoftCache()` as the default and allow
to override the mode through a property.
NO_SOFT_CACHE = Boolean.parseBoolean(
props.getProperty("java.lang.invoke.MethodHandle.NO_SOFT_CACHE",
Boolean.toString(CDS.disableMethodHandleSoftCache()));
-------------
Marked as reviewed by vlivanov (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/21049#pullrequestreview-2344311986
PR Review Comment: https://git.openjdk.org/jdk/pull/21049#discussion_r1785372914