RFR: 8338526: Don't store abstract and interface Klasses in class metaspace [v3]

Ioi Lam iklam at openjdk.org
Wed Aug 28 06:02:23 UTC 2024


On Tue, 27 Aug 2024 17:27:19 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> This change stores InstanceKlass for interface and abstract classes in the non-class metaspace, since class metaspace will have limits on number of classes that can be represented when Lilliput changes go in.  Classes that have no instances created for them don't require compressed class pointers.  The generated LambdaForm classes are also AllStatic, and changing them to abstract moves them to non-class metaspace too.  It's not technically great to make them abstract and not final but you can't have both.  Java classfile access flags have no way of specifying something like AllStatic.
>> 
>> Tested with tier1-8.
>
> Coleen Phillimore has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains four commits:
> 
>  - With JDK-8338929 we don't need is_in_class_space().
>  - Merge branch 'master' into anon
>  - Incorporated a set of Thomas Stuefe's comments. Take out AbstractClass MetaspaceObj::Type.
>  - 8338526: Don't store abstract and interface Klasses in class metaspace

Looks OK to me.

Maybe we should add an assert in `CompressedKlassPointers::encode_not_null()` to check that we never encode abstract and interface classes?

src/hotspot/share/oops/metadata.hpp line 2:

> 1: /*
> 2:  * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved.

No more change in this file?

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

PR Review: https://git.openjdk.org/jdk/pull/19157#pullrequestreview-2265222694
PR Review Comment: https://git.openjdk.org/jdk/pull/19157#discussion_r1734036194


More information about the core-libs-dev mailing list