On Wed, 16 Oct 2024 00:03:25 GMT, Ioi Lam <ik...@openjdk.org> 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 16 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
>  - reviews from @iwanowww and @rose00 -- move USE_SOFT_CACHE to 
> MethodHandleNatives as a @Stable field; use system prop for init
>  - 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
>  - 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
>  - ... and 6 more: https://git.openjdk.org/jdk/compare/31f55db0...11391c39

Still looks good except `@Stable` on `USE_SOFT_CACHE`. As it is implemented 
now, I don't see any point in dropping `final` in favor of `@Stable` since it 
is initialized only once and only from static initializer.

@iklam I'd be surprised if this class is AOT-initialized. I hope it's not the 
case here.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/21049#issuecomment-2420771205

Reply via email to