Skip to content

8309413: Improve the performance of MethodTypeDesc::descriptorString #13186

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from

Conversation

liach
Copy link
Member

@liach liach commented Mar 26, 2023

This patch aims to improve the performance of MethodTypeDesc in general, as it is currently a performance bottleneck in the Classfile API. A previous revision changed the parameter storage from an array to a list; this is dropped now. Sorry for the force push.

Benchmark                                                             (descString)  Mode  Cnt    Score   Error  Units
MethodTypeDescFactories.descriptorString   (Ljava/lang/Object;Ljava/lang/String;)I  avgt    6   27.778 ± 0.573  ns/op
MethodTypeDescFactories.descriptorString                                       ()V  avgt    6   13.343 ± 0.235  ns/op
MethodTypeDescFactories.descriptorString  ([IJLjava/lang/String;Z)Ljava/util/List;  avgt    6   40.828 ± 0.448  ns/op
MethodTypeDescFactories.descriptorString                     ()[Ljava/lang/String;  avgt    6   14.754 ± 0.162  ns/op
MethodTypeDescFactories.ofArray            (Ljava/lang/Object;Ljava/lang/String;)I  avgt    6    8.616 ± 0.132  ns/op
MethodTypeDescFactories.ofArray                                                ()V  avgt    6    2.146 ± 0.293  ns/op
MethodTypeDescFactories.ofArray           ([IJLjava/lang/String;Z)Ljava/util/List;  avgt    6   14.595 ± 0.235  ns/op
MethodTypeDescFactories.ofArray                              ()[Ljava/lang/String;  avgt    6    2.064 ± 0.085  ns/op
MethodTypeDescFactories.ofDescriptor       (Ljava/lang/Object;Ljava/lang/String;)I  avgt    6   97.077 ± 2.482  ns/op
MethodTypeDescFactories.ofDescriptor                                           ()V  avgt    6   13.563 ± 0.111  ns/op
MethodTypeDescFactories.ofDescriptor      ([IJLjava/lang/String;Z)Ljava/util/List;  avgt    6  130.543 ± 2.847  ns/op
MethodTypeDescFactories.ofDescriptor                         ()[Ljava/lang/String;  avgt    6   35.286 ± 0.260  ns/op
MethodTypeDescFactories.ofList             (Ljava/lang/Object;Ljava/lang/String;)I  avgt    6    4.156 ± 0.258  ns/op
MethodTypeDescFactories.ofList                                                 ()V  avgt    6    2.192 ± 0.063  ns/op
MethodTypeDescFactories.ofList            ([IJLjava/lang/String;Z)Ljava/util/List;  avgt    6   41.002 ± 0.235  ns/op
MethodTypeDescFactories.ofList                               ()[Ljava/lang/String;  avgt    6    2.200 ± 0.041  ns/op


Progress

  • Change must be properly reviewed (1 review required, with at least 1 Reviewer)
  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue

Issues

  • JDK-8309413: Improve the performance of MethodTypeDesc::descriptorString
  • JDK-8304932: MethodTypeDescImpl can be mutated by argument passed to MethodTypeDesc.of

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/13186/head:pull/13186
$ git checkout pull/13186

Update a local copy of the PR:
$ git checkout pull/13186
$ git pull https://git.openjdk.org/jdk.git pull/13186/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 13186

View PR using the GUI difftool:
$ git pr show -t 13186

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/13186.diff

Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Mar 26, 2023

👋 Welcome back liach! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr Pull request is ready for review label Mar 26, 2023
@openjdk
Copy link

openjdk bot commented Mar 26, 2023

@liach The following label will be automatically applied to this pull request:

  • core-libs

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added the core-libs core-libs-dev@openjdk.org label Mar 26, 2023
@mlbridge
Copy link

mlbridge bot commented Mar 26, 2023

Webrevs

@liach
Copy link
Member Author

liach commented Mar 26, 2023

Additional comments:

  1. Maybe it's feasible to add another factory:
static MethodTypeDesc of(ClassDesc returnType, List<ClassDesc> parameterTypes) {
    return new MethodTypeDescImpl(returnType, List.copyOf(parameterTypes));
}

which would avoid another copy if parameterTypes is already a list from List.of factories.

  1. Avoiding copies in parameterList can speed up its users, such as stack map generation in the Classfile API.

@asotona
Copy link
Member

asotona commented Apr 17, 2023

Additional comments:

  1. Maybe it's feasible to add another factory:
static MethodTypeDesc of(ClassDesc returnType, List<ClassDesc> parameterTypes) {
    return new MethodTypeDescImpl(returnType, List.copyOf(parameterTypes));
}

which would avoid another copy if parameterTypes is already a list from List.of factories.

  1. Avoiding copies in parameterList can speed up its users, such as stack map generation in the Classfile API.

Yes, any improvements avoiding unnecessary arrays copying are welcome. ClassDesc and MethodTypeDesc are key pieces of the Classfile API with significant performance impact.

@mlchung
Copy link
Member

mlchung commented Apr 17, 2023

Have you considered that the caller of instantiating MethodTypeDescImpl is responsible for passing a trusted array? I think that MethodTypeDescImpl implementation already assumes it's a trusted array. So MethodTypeDesc::of to call new MethodTypeDescImpl with a cloned array. MethodTypeDescImpl should call new MethodTypeDescImpl instead of MethodTypeDesc::of as this PR did.

That way will avoid using JavaUtilCollectionAccess to create an immutable list without copying the input array.

@liach
Copy link
Member Author

liach commented Apr 17, 2023

Have you considered that the caller of instantiating MethodTypeDescImpl is responsible for passing a trusted array? I think that MethodTypeDescImpl implementation already assumes it's a trusted array. So MethodTypeDesc::of to call new MethodTypeDescImpl with a cloned array. MethodTypeDescImpl should call new MethodTypeDescImpl instead of MethodTypeDesc::of as this PR did.

That way will avoid using JavaUtilCollectionAccess to create an immutable list without copying the input array.

My plan was that MethodType will expose extra entry points:

static MethodTypeDesc of(ClassDesc returnType) {
    return of(returnType, List.of());
}

static MethodTypeDesc of(ClassDesc returnType, Collection<ClassDesc> paramTypes) {
    return of(returnType, List.copyOf(paramTypes));
}

The Collection version can avoid copying if the user-provided list is already a null-hostile immutable list. If this API is added, I can safely swap all existing new MethodTypeDescImpl with MethodTypeDesc.of without problems.

For the backing structure for parameters, I still believe an immutable list is better than an array; unlike MethodType that needs to interact with the VM which loves arrays better, MTD is mainly user-oriented and parameterList is often used by programmers. By avoiding list copies in parameterList() alone, I think there will be immediate benefit to users.

@liach liach changed the title 8304932: MethodTypeDescImpl can be mutated by argument passed to MethodTypeDesc.of 8306889: Convert MethodTypeDescImpl parameter storage from array to immutable list Apr 26, 2023
@liach
Copy link
Member Author

liach commented Apr 26, 2023

/issue JDK-8304932

Moved this patch to another issue that focus on converting the storage from array to immutable list. The fix for mutation is now a side effect of this patch.

@openjdk
Copy link

openjdk bot commented Apr 26, 2023

@liach
Adding additional issue to issue list: 8304932: MethodTypeDescImpl can be mutated by argument passed to MethodTypeDesc.of.

@openjdk
Copy link

openjdk bot commented May 24, 2023

⚠️ @liach This pull request contains merges that bring in commits not present in the target repository. Since this is not a "merge style" pull request, these changes will be squashed when this pull request in integrated. If this is your intention, then please ignore this message. If you want to preserve the commit structure, you must change the title of this pull request to Merge <project>:<branch> where <project> is the name of another project in the OpenJDK organization (for example Merge jdk:master).

@liach
Copy link
Member Author

liach commented May 24, 2023

Now updated to the latest MethodTypeDesc.of factories, this patch is ready for review and integration. Below is a few performance information about this patch.

This patch:

Benchmark                                                                     (descString)   Mode  Cnt      Score      Error   Units
MethodTypeDescDescriptor.computeDescriptorString   (Ljava/lang/Object;Ljava/lang/String;)I  thrpt    6  39518.106 ±  525.077  ops/ms
MethodTypeDescDescriptor.computeDescriptorString                                       ()V  thrpt    6  62312.500 ±  579.585  ops/ms
MethodTypeDescDescriptor.computeDescriptorString  ([IJLjava/lang/String;Z)Ljava/util/List;  thrpt    6  21856.065 ±  678.237  ops/ms
MethodTypeDescDescriptor.computeDescriptorString                     ()[Ljava/lang/String;  thrpt    6  57457.483 ± 1416.646  ops/ms

Benchmark                      Mode  Cnt      Score     Error  Units
RebuildMethodBodies.shared    thrpt    4  21684.365 ± 941.586  ops/s
RebuildMethodBodies.unshared  thrpt    4  15724.422 ± 153.420  ops/s

master:

Benchmark                                                                        (descString)   Mode  Cnt     Score     Error   Units
MethodTypeDescDescriptorOld.computeDescriptorString   (Ljava/lang/Object;Ljava/lang/String;)I  thrpt    6  6062.735 ±  61.852  ops/ms
MethodTypeDescDescriptorOld.computeDescriptorString                                       ()V  thrpt    6  8703.338 ± 205.429  ops/ms
MethodTypeDescDescriptorOld.computeDescriptorString  ([IJLjava/lang/String;Z)Ljava/util/List;  thrpt    6  5673.104 ±  62.810  ops/ms
MethodTypeDescDescriptorOld.computeDescriptorString                     ()[Ljava/lang/String;  thrpt    6  8232.874 ± 161.060  ops/ms

Benchmark                      Mode  Cnt      Score     Error  Units
RebuildMethodBodies.shared    thrpt    4  18317.288 ± 465.309  ops/s
RebuildMethodBodies.unshared  thrpt    4  13744.541 ± 399.263  ops/s

The Classfile API code generation and descriptor string computation speed up with this patch.

Additional benchmarks for this patch:

Benchmark                                     (kind)   Mode  Cnt       Score       Error   Units
MethodTypeDescConstruct.ofArrayBench         GENERIC  thrpt    6  203322.703 ±  5795.340  ops/ms
MethodTypeDescConstruct.ofArrayBench            VOID  thrpt    6  397200.234 ±  7467.524  ops/ms
MethodTypeDescConstruct.ofArrayBench        NO_PARAM  thrpt    6  398156.642 ±  7230.653  ops/ms
MethodTypeDescConstruct.ofArrayBench       ARBITRARY  thrpt    6   91751.039 ±  2451.052  ops/ms
MethodTypeDescConstruct.ofDescriptorBench    GENERIC  thrpt    6    8184.264 ±   185.177  ops/ms
MethodTypeDescConstruct.ofDescriptorBench       VOID  thrpt    6   68775.908 ±  2471.949  ops/ms
MethodTypeDescConstruct.ofDescriptorBench   NO_PARAM  thrpt    6   28129.233 ±   454.477  ops/ms
MethodTypeDescConstruct.ofDescriptorBench  ARBITRARY  thrpt    6    7634.086 ±   333.202  ops/ms
MethodTypeDescConstruct.ofListBench          GENERIC  thrpt    6  311382.640 ± 15817.487  ops/ms
MethodTypeDescConstruct.ofListBench             VOID  thrpt    6  371300.447 ±  2310.545  ops/ms
MethodTypeDescConstruct.ofListBench         NO_PARAM  thrpt    6  367942.613 ± 10068.395  ops/ms
MethodTypeDescConstruct.ofListBench        ARBITRARY  thrpt    6  199825.985 ±  5963.658  ops/ms

Shows that immutable parameter lists from users can be reused, and that using object representation to construct method type descs is always preferable to parsing descriptors; this is the same conclusion from #13671, that avoiding repeated parsing and reusing tokenization from classfile builder site actually improves performance.

Descriptor parsing is somewhat slower than in the initial benchmark, though the recent updates did not touch code in that area.

@mlchung
Copy link
Member

mlchung commented May 26, 2023

The microbenchmark shows the performance of using the MethodTypeDesc factory methods. With #13671, MethodTypeDesc is cached and I wonder if this is no longer the bottleneck of ClassFile API performance.

JDK-8304932 is a bug that can simply be fixed by

diff --git a/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java b/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java
index 738c4d68a43..ed23887c9ef 100644
--- a/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java
+++ b/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java
@@ -95,7 +95,7 @@ public sealed interface MethodTypeDesc
      * {@link ClassDesc} for {@code void}
      */
     static MethodTypeDesc of(ClassDesc returnDesc, ClassDesc... paramDescs) {
-        return new MethodTypeDescImpl(returnDesc, paramDescs);
+        return new MethodTypeDescImpl(returnDesc, paramDescs.clone());
     }
 
     /**
diff --git a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
index 4341c3fb56f..8586bfb5926 100644
--- a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
+++ b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
@@ -41,7 +41,7 @@ import static java.util.Objects.requireNonNull;
  */
 final class MethodTypeDescImpl implements MethodTypeDesc {
     private final ClassDesc returnType;
-    private final ClassDesc[] argTypes;
+    private final ClassDesc[] argTypes;     // trusted array
 
     /**
      * Constructs a {@linkplain MethodTypeDesc} with the specified return type
@@ -102,14 +102,14 @@ final class MethodTypeDescImpl implements MethodTypeDesc {
 
     @Override
     public MethodTypeDesc changeReturnType(ClassDesc returnType) {
-        return MethodTypeDesc.of(returnType, argTypes);
+        return new MethodTypeDescImpl(returnType, argTypes);
     }
 
     @Override
     public MethodTypeDesc changeParameterType(int index, ClassDesc paramType) {
         ClassDesc[] newArgs = argTypes.clone();
         newArgs[index] = paramType;
-        return MethodTypeDesc.of(returnType, newArgs);
+        return new MethodTypeDescImpl(returnType, newArgs);
     }
 
     @Override
@@ -120,7 +120,7 @@ final class MethodTypeDescImpl implements MethodTypeDesc {
         ClassDesc[] newArgs = new ClassDesc[argTypes.length - (end - start)];
         System.arraycopy(argTypes, 0, newArgs, 0, start);
         System.arraycopy(argTypes, end, newArgs, start, argTypes.length - end);
-        return MethodTypeDesc.of(returnType, newArgs);
+        return new MethodTypeDescImpl(returnType, newArgs);
     }
 
     @Override
@@ -131,7 +131,7 @@ final class MethodTypeDescImpl implements MethodTypeDesc {
         System.arraycopy(argTypes, 0, newArgs, 0, pos);
         System.arraycopy(paramTypes, 0, newArgs, pos, paramTypes.length);
         System.arraycopy(argTypes, pos, newArgs, pos+paramTypes.length, argTypes.length - pos);
-        return MethodTypeDesc.of(returnType, newArgs);
+        return new MethodTypeDescImpl(returnType, newArgs);
     }
 

I won't object to keep argTypes in an immutable list instead of an array. However, MethodTypeDescImpl::ofDescriptor has to build from the list of string parameters to an array or mutable list of parameter descriptors first anyway. Other APIs to add/drop the parameter types also construct a new array/list of parameter types. Keeping argTypes in a trusted array seems to be the simplest. Converting argTypes to an immutable list seems to be an extra step to make it immutable - we need frozen arrays!!

So I think we should only fix JDK-8304932.

@liach
Copy link
Member Author

liach commented May 26, 2023

The benefits of a list implementation over an array implementation are:

  1. parameterList() is much faster, allowing more beautiful user code compared to manually unpacked iteration (immutable list factory doesn't allow using non-Object backing arrays)
  2. of(ClassDesc, List) allows users to share immutable parameter lists than having to copy

With #13671, MethodTypeDesc is cached and I wonder if this is no longer the bottleneck of ClassFile API performance.

The parsing is no more, but descriptorString is still a bottleneck. The master in the last benchmark already had 8306842 integrated.

In fact, I don't think argType array sharing goes far enough: in these modification methods and ofDescriptor, we can skip the array/list iteration validation if we can ensure the change parts alone have not produced an invalid method type (insertion of void, slot changes). I would postpone such in-depth sharing into a later issue, where we track the slot count information as well (to preemptively reject invalid resolveConstantDesc calls)

Converting argTypes to an immutable list seems to be an extra step to make it immutable - we need frozen arrays!!

Unfortunately, this is currently the only way general users have access to frozen arrays, where index-based access may be constant-folded, as @Stable is not generally available.

@liach liach force-pushed the fix/mtd-immutable branch from efc8018 to 90c6463 Compare June 4, 2023 23:46
@liach liach changed the title 8306889: Convert MethodTypeDescImpl parameter storage from array to immutable list 8309413: General improvements to MethodTypeDesc implementation Jun 4, 2023
@openjdk
Copy link

openjdk bot commented Jun 4, 2023

@liach Please do not rebase or force-push to an active PR as it invalidates existing review comments. Note for future reference, the bots always squash all changes into a single commit automatically as part of the integration. See OpenJDK Developers’ Guide for more information.

@liach
Copy link
Member Author

liach commented Jun 4, 2023

@mlchung I have updated this patch to no longer change the array to a list. Could you take a look? I wish this to be integrated into JDK 21 as it does bring a lot of performance benefits.

Copy link
Member

@mlchung mlchung left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some comments in MethodTypeDesc and its implementation. Will take a look at the test.

I'd like to see the ClassFile implementation changes in a separate PR that needs @asotona to give input and review. The proposed change in the ClassFile implementation is trivial but I can't really tell what the performance issue is (of course, I know it avoids the array allocation).

For ClassFile performance issues, it would be useful to have the understanding of the major issues that contribute to the performance overhead. That would help consider the fixes and alternatives.

@@ -95,7 +96,12 @@ static MethodTypeDesc of(ClassDesc returnDesc, List<ClassDesc> paramDescs) {
* {@link ClassDesc} for {@code void}
*/
static MethodTypeDesc of(ClassDesc returnDesc, ClassDesc... paramDescs) {
return new MethodTypeDescImpl(returnDesc, paramDescs);
if (paramDescs.length == 0)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

paramDescs could be null.

.map(ClassDesc::descriptorString)
.collect(Collectors.joining()),
returnType().descriptorString());
var sj = new StringJoiner("", "(", ")" + returnType().descriptorString());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MethodTypeDescImpl is the only class implementing MethodTypeDesc and implements descriptorString(). This default implementation is not needed. Should the implementation be moved to MethodTypeDescImpl::descriptorString?

if (paramCount > 0) {
paramTypes = new ClassDesc[paramCount];
for (int i = 0; i < paramCount; i++) {
paramTypes[i] = validateParameter(ClassDesc.ofDescriptor(types.get(i + 1)));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems useful to have a static factory method to take a trusted copy of parameter types and it will validate the parameters before constructing MethodTypeDescImpl instance. Parameter validation in one single place. Several methods doing the validation can simply call this factory method and the code would be cleaner.

insertParameterTypes can call it as well and overhead of re-validating existing parameter types isn't a big issue.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I just keep track of the slot count of MethodTypeDesc instead? Having a slot count implicitly requires validating the parameters, and the slot count can be used to eagerly reject resolveConstantDesc on MTD with over 255 slots.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think resolveConstantDesc is performance-sensitive that needs the eager checking of the number of parameter slots. Also the common case is to resolve a good MethodType with <= 255 parameter slots.

@@ -62,14 +61,14 @@ private void testMethodTypeDesc(MethodTypeDesc r) throws ReflectiveOperationExce
assertEquals(r, MethodTypeDesc.of(r.returnType(), r.parameterList().toArray(new ClassDesc[0])));
assertEquals(r, MethodTypeDesc.of(r.returnType(), r.parameterList().stream().toArray(ClassDesc[]::new)));
assertEquals(r, MethodTypeDesc.of(r.returnType(), IntStream.range(0, r.parameterCount())
.mapToObj(r::parameterType)
.toArray(ClassDesc[]::new)));
.mapToObj(r::parameterType)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this reformatting may be accidental. Please keep the original format. Same applies to other reformatted lines in this file.

@liach
Copy link
Member Author

liach commented Jun 5, 2023

I added an ofTrusted factory in MTD impl to validate a trusted parameter array. The name is intentionally chosen to distinguish from the regular MethodTypeDesc.of which accepts untrusted arrays.

Copy link
Member

@mlchung mlchung left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the change and it looks better. I updated the description of JDK-8309413 to make it clearer.

*/
MethodTypeDescImpl(ClassDesc returnType, ClassDesc[] argTypes) {
MethodTypeDescImpl(ClassDesc returnType, ClassDesc[] validatedArgTypes) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can make this constructor private to prevent accidental use with invalidated argTypes. MethodTypeDesc.of(ClassDesc returnDesc) can call ofTrusted factory method.

liach and others added 2 commits June 6, 2023 08:26
Co-authored-by: Mandy Chung <mandy.chung@oracle.com>
@liach liach changed the title 8309413: General improvements to MethodTypeDesc implementation 8309413: Improve the performance of MethodTypeDesc::descriptorString Jun 6, 2023
@openjdk
Copy link

openjdk bot commented Jun 6, 2023

@liach This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8309413: Improve the performance of MethodTypeDesc::descriptorString
8304932: MethodTypeDescImpl can be mutated by argument passed to MethodTypeDesc.of

Reviewed-by: mchung

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 22 new commits pushed to the master branch:

  • 6d155a4: 8308167: SequencedMap::firstEntry throws NPE when first entry has null key or value
  • 4b15349: 8304438: jcmd JVMTI.agent_load should obey EnableDynamicAgentLoading
  • b3c9d67: 8309136: [JVMCI] add -XX:+UseGraalJIT flag
  • 98b53c0: 8306112: Implementation of JEP 445: Unnamed Classes and Instance Main Methods (Preview)
  • e970ddb: 8309170: CDS archive heap is always relocated for larger heap
  • 4b8922f: 8308842: Consolidate exceptions thrown from Class-File API
  • 2b38343: 8309416: Misstatement in semantics of methods in javax.lang.model.ElementFilter
  • 73352b6: 8280994: [XWayland] Drag and Drop does not work in java -> wayland app direction
  • 5cd8af7: 8308726: RISC-V: avoid unnecessary slli in the vectorized arraycopy stubs for bytes
  • 80232b7: 8308969: make test-prebuilt doesn't return the correct exit code
  • ... and 12 more: https://git.openjdk.org/jdk/compare/ecb17532dc8f3e271ad2d6550127a2253569cf9b...master

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@mlchung) but any other Committer may sponsor as well.

➡️ To flag this PR as ready for integration with the above commit message, type /integrate in a new comment. (Afterwards, your sponsor types /sponsor in a new comment to perform the integration).

@openjdk openjdk bot added the ready Pull request is ready to be integrated label Jun 6, 2023
@liach
Copy link
Member Author

liach commented Jun 6, 2023

/integrate

@openjdk openjdk bot added the sponsor Pull request is ready to be sponsored label Jun 6, 2023
@openjdk
Copy link

openjdk bot commented Jun 6, 2023

@liach
Your change (at version fa66020) is now ready to be sponsored by a Committer.

@mlchung
Copy link
Member

mlchung commented Jun 6, 2023

/sponsor

@openjdk
Copy link

openjdk bot commented Jun 6, 2023

Going to push as commit 38cef2a.
Since your change was applied there have been 34 commits pushed to the master branch:

  • 7edd054: 8309501: Remove workaround in bin/idea.sh for non standard JVMCI file layout
  • 9188142: 8309216: Cast from jchar* to char* in test java/io/GetXSpace.java
  • d709c25: 8307887: (fs) Files.createSymbolicLink throws less specific exception when in developer mode and file already exists
  • ca6f07f: 8309534: @jep(number=430, title="String Templates") should use default status
  • 8f0839b: 8308748: JNU_GetStringPlatformChars may write to String's internal memory array
  • 01455a0: 8304878: ConcurrentModificationException in javadoc tool
  • 7d25bf7: 8309419: RISC-V: Relax register constraint for AddReductionVF & AddReductionVD nodes
  • 5146a58: 8309418: RISC-V: Make use of vl1r.v & vfabs.v pseudo-instructions where appropriate
  • 41bf2ad: 8308875: java/awt/Toolkit/GetScreenInsetsCustomGC/GetScreenInsetsCustomGC.java failed with 'Cannot invoke "sun.awt.X11GraphicsDevice.getInsets()" because "device" is null'
  • a7a0913: 8309346: Extend hs_err logging for all VM operations deriving from VM_GC_Operation
  • ... and 24 more: https://git.openjdk.org/jdk/compare/ecb17532dc8f3e271ad2d6550127a2253569cf9b...master

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label Jun 6, 2023
@openjdk openjdk bot closed this Jun 6, 2023
@openjdk openjdk bot removed ready Pull request is ready to be integrated rfr Pull request is ready for review sponsor Pull request is ready to be sponsored labels Jun 6, 2023
@openjdk
Copy link

openjdk bot commented Jun 6, 2023

@mlchung @liach Pushed as commit 38cef2a.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
core-libs core-libs-dev@openjdk.org integrated Pull request has been integrated
Development

Successfully merging this pull request may close these issues.

3 participants