RFR: 8336267: Method and Constructor signature parsing can be shared on the root object [v2]
Mandy Chung
mchung at openjdk.org
Tue Oct 29 22:40:13 UTC 2024
On Wed, 21 Aug 2024 16:03:15 GMT, Chen Liang <liach at openjdk.org> wrote:
>> A straightforward optimization, to share the signature parsing of method, constructor, and field between the root and the copied objects, like how method handle accessors are shared.
>
> Chen Liang has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains two commits:
>
> - Merge branch 'master' of https://github.com/openjdk/jdk into feature/member-sig-share
> - 8336267: Method and Constructor signature parsing can be shared on the root object
It's okay to extend the root object to share `genericInfo` besides the accessor. But we need to update the comment to make that clear.
@Stable
private ConstructorAccessor constructorAccessor;
// For sharing of ConstructorAccessors. This branching structure
// is currently only two levels deep (i.e., one root Constructor
// and potentially many Constructor objects pointing to it.)
//
// If this branching structure would ever contain cycles, deadlocks can
// occur in annotation code.
private Constructor<T> root;
The comment for `root` should be extended to cover the generics repository. In addition, I suggest to move the declaration of instance variable `genericInfo` closer to the accessor and `root`.
src/java.base/share/classes/java/lang/reflect/Constructor.java line 100:
> 98: genericInfo =
> 99: ConstructorRepository.make(getSignature(),
> 100: getFactory());
Suggestion:
genericInfo = ConstructorRepository.make(getSignature(), getFactory());
Nit: This fits well in one line.
src/java.base/share/classes/java/lang/reflect/Field.java line 118:
> 116: // create and cache generic info repository
> 117: genericInfo = FieldRepository.make(getGenericSignature(),
> 118: getFactory());
Suggestion:
genericInfo = FieldRepository.make(getGenericSignature(), getFactory());
src/java.base/share/classes/java/lang/reflect/Method.java line 122:
> 120: // create and cache generic info repository
> 121: genericInfo = MethodRepository.make(getGenericSignature(),
> 122: getFactory());
Suggestion:
genericInfo = MethodRepository.make(getGenericSignature(), getFactory());
-------------
PR Review: https://git.openjdk.org/jdk/pull/20179#pullrequestreview-2403193407
PR Review Comment: https://git.openjdk.org/jdk/pull/20179#discussion_r1821607268
PR Review Comment: https://git.openjdk.org/jdk/pull/20179#discussion_r1821608006
PR Review Comment: https://git.openjdk.org/jdk/pull/20179#discussion_r1821608108
More information about the core-libs-dev
mailing list