On Wed, 21 Aug 2024 20:25:07 GMT, Chen Liang <li...@openjdk.org> wrote:

> @cl4es discovered that Stack Map generation in ClassFile API uses 
> `componentType` and `arrayType` for `aaload` `aastore` instructions, which 
> are currently quite slow. We can split out array class descriptors from class 
> or interfaces to support faster `arrayType` and `componentType` operations.
> 
> Tentative, as I currently have no way to measure the actual impact of this 
> patch on the startup performance; however, this made the `ClassDesc` 
> implementations much cleaner.

LGTM. Always a bit queasy to add a third to a nice pair of classes, but if this 
ever shows up as a problem on benchmarks we can revisit and think of 
alternatives (such as adding a rank field in each impl).

src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java line 
79:

> 77:     private static final ClassDesc CD_LambdaForm_Name = 
> ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/LambdaForm$Name;");
> 78:     private static final ClassDesc CD_LoopClauses = 
> ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/MethodHandleImpl$LoopClauses;");
> 79:     private static final ClassDesc CD_Object_array  = 
> CD_Object.arrayType();

I guess `CD_Object.arrayType()` shows up often enough now - even once _in_ 
`java.lang.constant.ConstantDescs` - that we might as well pin it down as a 
constant somewhere (`ConstantDescs` is a candidate location, but that will take 
a CSR).

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

Marked as reviewed by redestad (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/20665#pullrequestreview-2329407468
PR Review Comment: https://git.openjdk.org/jdk/pull/20665#discussion_r1775916278

Reply via email to