RFR: 8306697: Add method to obtain String for CONSTANT_Class_info in ClassDesc [v2]

Adam Sotona asotona at openjdk.org
Thu Apr 27 09:23:23 UTC 2023


On Sat, 22 Apr 2023 18:40:45 GMT, Chen Liang <liach at openjdk.org> wrote:

>> Add a method `internalName` to `ClassDesc`, and unifies handling of string representation of a class constant in CONSTANT_Class_info via `ofInternalName` and `internalName` APIs, documented in `ClassDesc` itself. In particular, `ofInternalName` now accepts arrays.
>> 
>> The motivation of this API is that avoiding frequent String creations via caching (enabled by this new API, will be in a separate patch) would speed up Classfile API's [writing of simple class files](https://github.com/openjdk/jdk/blob/master/test/micro/org/openjdk/bench/jdk/classfile/Write.java) by 1/3. See https://mail.openjdk.org/pipermail/classfile-api-dev/2023-April/000296.html for more context.
>> 
>> This API is futureproof: for Valhalla's Q-types, it will return their string representation in CONSTANT_Class_info, which is most likely their full descriptor string.
>> 
>> Javadoc: https://cr.openjdk.org/~liach/8306697/java.base/java/lang/constant/ClassDesc.html
>
> Chen Liang has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Unify ofInternalName and internalName, document about CONSTANT_Class_info, remove misleading JVMS 4.4.1 links

src/java.base/share/classes/java/lang/constant/ReferenceClassDescImpl.java line 60:

> 58:     @Override
> 59:     public String internalName() {
> 60:         return isArray() ? descriptorString() : descriptorString().substring(1, descriptorString().length() - 1);

I suggest to cache the internal name to avoid repeated substring-ing with each call.
`ClassDesc` instances are frequently used as static constants serving for generations or transformations of many classes, methods, instructions. 
It is highly expected that if this method is invoked at least once on the particular instance, it will be invoked many times on the same instance.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13598#discussion_r1178855034


More information about the core-libs-dev mailing list