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. I know this requires a CSR; it's just not created due to this still being a draft. The main purpose of this is still for speeding up stack map generation; the results are not confirmed yet, so this patch is on hold. For megamorphic call site thing, the regular workload would be like: if (c.isArray()) doArrayStuff(c); if (c.isClassOrInterface()) doClassOrInterfaceStuff(c); I think polymorphism is fine here, as after the check we usually go straight to perform type-specific operations like `componentType()`; or sometimes a method expects the input ClassDesc to be always primitive/class or interface/array, which won't lead to profile pollutions. This concern might be more valid for `descriptorString` I suppose. Confirmed this is performance-wise neutral for startup. Ready for review. ------------- PR Comment: https://git.openjdk.org/jdk/pull/20665#issuecomment-2313134513 PR Comment: https://git.openjdk.org/jdk/pull/20665#issuecomment-2374901141