Skip to content
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

8300148: Consider using a StoreStore barrier instead of Release barrier on ctor exit #18505

Closed
wants to merge 21 commits into from

Conversation

caojoshua
Copy link
Contributor

@caojoshua caojoshua commented Mar 27, 2024

The JSR 133 cookbook has long recommended using a StoreStore barrier at the end of constructors that write to final fields. StoreStore barriers are much cheaper on arm machines as shown in benchmarks in this issue as well as https://bugs.openjdk.org/browse/JDK-8324186.

This change does not improve the case for constructors for objects with volatile fields because MemBarRelease is emitted for volatile stores. This is demonstrated in test case classWithVolatile, where this patch does not impact the IR.

I had to modify some code around escape analysis to make sure there are no regressions in eliminating allocations and StoreStore's. The current handling of StoreStore's in escape analysis makes the assumption that the barriers input is a Proj to an Allocate (example). This is contrary to the barriers in the end of the constructor where there the barrier directly takes in an Allocate without an in between Proj. I opted to instead eliminate StoreStores in GVN, exactly how MemBarRelease is handled.

I had to add checks for StoreStore in macro.cpp, or else we fail some cases for reducing allocation merges.

Passes hotspot tier1 locally on a Linux machine.

Benchmarks

Running Renaissance ParNnemonics on an Amazon Graviton (arm) instance.

Baseline:

Result "org.renaissance.jdk.streams.JmhParMnemonics.run":
  N = 25
  mean =   3309.611 ±(99.9%) 86.699 ms/op

  Histogram, ms/op:
    [3000.000, 3050.000) = 0
    [3050.000, 3100.000) = 4
    [3100.000, 3150.000) = 1
    [3150.000, 3200.000) = 0
    [3200.000, 3250.000) = 0
    [3250.000, 3300.000) = 0
    [3300.000, 3350.000) = 9
    [3350.000, 3400.000) = 6
    [3400.000, 3450.000) = 5

  Percentiles, ms/op:
      p(0.0000) =   3069.910 ms/op
     p(50.0000) =   3348.140 ms/op
     p(90.0000) =   3415.178 ms/op
     p(95.0000) =   3417.057 ms/op
     p(99.0000) =   3417.780 ms/op
     p(99.9000) =   3417.780 ms/op
     p(99.9900) =   3417.780 ms/op
     p(99.9990) =   3417.780 ms/op
     p(99.9999) =   3417.780 ms/op
    p(100.0000) =   3417.780 ms/op

After patch:

Result "org.renaissance.jdk.streams.JmhParMnemonics.run":                                                                                       [20/383]
  N = 25
  mean =   2765.754 ±(99.9%) 62.062 ms/op

  Histogram, ms/op:
    [2600.000, 2625.000) = 0
    [2625.000, 2650.000) = 4
    [2650.000, 2675.000) = 2
    [2675.000, 2700.000) = 3
    [2700.000, 2725.000) = 0
    [2725.000, 2750.000) = 0
    [2750.000, 2775.000) = 0
    [2775.000, 2800.000) = 5
    [2800.000, 2825.000) = 5
    [2825.000, 2850.000) = 2
    [2850.000, 2875.000) = 3

  Percentiles, ms/op:
      p(0.0000) =   2632.734 ms/op
     p(50.0000) =   2793.454 ms/op
     p(90.0000) =   2871.524 ms/op
     p(95.0000) =   2877.469 ms/op
     p(99.0000) =   2878.872 ms/op
     p(99.9000) =   2878.872 ms/op
     p(99.9900) =   2878.872 ms/op
     p(99.9990) =   2878.872 ms/op
     p(99.9999) =   2878.872 ms/op
    p(100.0000) =   2878.872 ms/op

We see a 16% improvement in throughput


Progress

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

Issue

  • JDK-8300148: Consider using a StoreStore barrier instead of Release barrier on ctor exit (Enhancement - P3)

Reviewers

Reviewing

Using git

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

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

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 18505

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

Using diff file

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

Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Mar 27, 2024

👋 Welcome back caojoshua! 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
Copy link

openjdk bot commented Mar 27, 2024

@caojoshua 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:

8300148: Consider using a StoreStore barrier instead of Release barrier on ctor exit

Reviewed-by: shade, kvn, dlong

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 79 new commits pushed to the master branch:

  • f1d0e71: 8324577: [REDO] - [IMPROVE] OPEN_MAX is no longer the max limit on macOS >= 10.6 for RLIMIT_NOFILE
  • 74b11cc: 8331004: Serial: Remove unused GenClosure
  • 45ed97f: 8330464: hserr generic events - add entry for the before_exit calls
  • e311ba3: 8330626: ZGC: Windows address space placeholders not managed correctly
  • e923dfe: 8314592: Add shortcut to SymbolLookup::find
  • 1519081: 8330303: Crash: assert(_target_jt == nullptr || _target_jt->vthread() == target_h()) failed
  • 2bb5cf5: 8330155: Serial: Remove TenuredSpace
  • 7bb59dc: 8330670: Obsolete ScavengeBeforeFullGC
  • 174d626: 8328741: serviceability/jvmti/ObjectMonitorUsage/ObjectMonitorUsage.java failed with unexpected owner
  • e681e9b: 8330819: C2 SuperWord: bad dominance after pre-loop limit adjustment with base that has CastLL after pre-loop
  • ... and 69 more: https://git.openjdk.org/jdk/compare/235ba9a7025964b1e43149c7102e26b82b2081ad...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 (@shipilev, @vnkozlov, @dean-long) 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 rfr Pull request is ready for review label Mar 27, 2024
@openjdk
Copy link

openjdk bot commented Mar 27, 2024

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

  • hotspot-compiler

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 hotspot-compiler hotspot-compiler-dev@openjdk.org label Mar 27, 2024
@mlbridge
Copy link

mlbridge bot commented Mar 27, 2024

Copy link
Member

@shipilev shipilev left a comment

Choose a reason for hiding this comment

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

I think you want to merge from master to get the clean GHA runs.

I am running some more tests here too.

@shipilev
Copy link
Member

shipilev commented Mar 27, 2024

I propose we also add this benchmark that verifies barrier costs and coalescing: ConstructorBarriers.txt. Maybe these also should be the IR tests. The benchmarks show that most combinations with final-s improve, and scalar replaced objects also still work (and probably eliminate all the barriers).

On my Graviton 3 instance:

Benchmark                                          Mode  Cnt   Score   Error  Units

# Before
ConstructorBarriers.escaping_finalFinal            avgt    9   9.097 ± 0.032  ns/op
ConstructorBarriers.escaping_finalPlain            avgt    9   9.120 ± 0.101  ns/op
ConstructorBarriers.escaping_finalVolatile         avgt    9  11.590 ± 0.088  ns/op
ConstructorBarriers.escaping_plainFinal            avgt    9   9.113 ± 0.037  ns/op
ConstructorBarriers.escaping_plainPlain            avgt    9   7.627 ± 0.155  ns/op
ConstructorBarriers.escaping_plainVolatile         avgt    9  13.055 ± 0.180  ns/op
ConstructorBarriers.escaping_volatileFinal         avgt    9  10.650 ± 0.112  ns/op
ConstructorBarriers.escaping_volatilePlain         avgt    9  13.074 ± 0.156  ns/op
ConstructorBarriers.escaping_volatileVolatile      avgt    9  13.546 ± 0.100  ns/op

ConstructorBarriers.non_escaping_finalFinal        avgt    9   2.220 ± 0.006  ns/op
ConstructorBarriers.non_escaping_finalPlain        avgt    9   2.214 ± 0.014  ns/op
ConstructorBarriers.non_escaping_finalVolatile     avgt    9   2.232 ± 0.035  ns/op
ConstructorBarriers.non_escaping_plainFinal        avgt    9   2.222 ± 0.004  ns/op
ConstructorBarriers.non_escaping_plainPlain        avgt    9   2.234 ± 0.036  ns/op
ConstructorBarriers.non_escaping_plainVolatile     avgt    9   2.230 ± 0.019  ns/op
ConstructorBarriers.non_escaping_volatileFinal     avgt    9   2.232 ± 0.018  ns/op
ConstructorBarriers.non_escaping_volatilePlain     avgt    9   2.220 ± 0.033  ns/op
ConstructorBarriers.non_escaping_volatileVolatile  avgt    9   2.232 ± 0.019  ns/op

# After
ConstructorBarriers.escaping_finalFinal            avgt    9   5.939 ± 0.035  ns/op  ; improves
ConstructorBarriers.escaping_finalPlain            avgt    9   5.945 ± 0.033  ns/op  ; improves
ConstructorBarriers.escaping_finalVolatile         avgt    9  10.997 ± 0.050  ns/op  ; improves
ConstructorBarriers.escaping_plainFinal            avgt    9   5.923 ± 0.061  ns/op  ; improves
ConstructorBarriers.escaping_plainPlain            avgt    9   7.687 ± 0.101  ns/op
ConstructorBarriers.escaping_plainVolatile         avgt    9  13.039 ± 0.206  ns/op
ConstructorBarriers.escaping_volatileFinal         avgt    9  10.568 ± 0.104  ns/op
ConstructorBarriers.escaping_volatilePlain         avgt    9  13.061 ± 0.158  ns/op
ConstructorBarriers.escaping_volatileVolatile      avgt    9  13.572 ± 0.174  ns/op

ConstructorBarriers.non_escaping_finalFinal        avgt    9   2.212 ± 0.019  ns/op
ConstructorBarriers.non_escaping_finalPlain        avgt    9   2.231 ± 0.041  ns/op
ConstructorBarriers.non_escaping_finalVolatile     avgt    9   2.239 ± 0.045  ns/op
ConstructorBarriers.non_escaping_plainFinal        avgt    9   2.224 ± 0.018  ns/op
ConstructorBarriers.non_escaping_plainPlain        avgt    9   2.214 ± 0.024  ns/op
ConstructorBarriers.non_escaping_plainVolatile     avgt    9   2.226 ± 0.029  ns/op
ConstructorBarriers.non_escaping_volatileFinal     avgt    9   2.239 ± 0.029  ns/op
ConstructorBarriers.non_escaping_volatilePlain     avgt    9   2.230 ± 0.039  ns/op
ConstructorBarriers.non_escaping_volatileVolatile  avgt    9   2.235 ± 0.030  ns/op

Copy link
Contributor

@vnkozlov vnkozlov left a comment

Choose a reason for hiding this comment

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

What about MemBarRelease in PhaseStringOpts::replace_string_concat()?

@vnkozlov
Copy link
Contributor

Can we also add statistic about how many different barriers C2 generates and eliminates? It will help to know if we missing some optimization with these changes.

@liach
Copy link
Member

liach commented Mar 27, 2024

I heard rumors that storeStore is only safe for the scenarios where the constructor doesn't read its already assigned final fields; so if we have something like

class Sample {
  final int a, b;
  Sample(int v) {
    this.a = v;
    this.b = this.a + 1; // performs read instance field before publication
  }
}

then we still need a regular release barrier.

Am I correct here?

@dean-long
Copy link
Member

dean-long commented Mar 28, 2024

@liach, in your example, I don't see an issue, unless "this" somehow escaped and allowed another thread to write to this.a, which would be difficult considering it is "final". This earlier discussion might help:
https://mail.openjdk.org/pipermail/jmm-dev/2016-November/000381.html

@caojoshua
Copy link
Contributor Author

What about MemBarRelease in PhaseStringOpts::replace_string_concat()?

Missed this. Added a commit for this

@caojoshua
Copy link
Contributor Author

Benchmark results on my graviton instances see similar improvements to @shipilev 's

Before:

Benchmark                                          Mode  Cnt   Score   Error  Units
ConstructorBarriers.escaping_finalFinal            avgt    3   9.229 ± 1.101  ns/op
ConstructorBarriers.escaping_finalPlain            avgt    3   9.150 ± 0.191  ns/op
ConstructorBarriers.escaping_finalVolatile         avgt    3  11.542 ± 1.259  ns/op
ConstructorBarriers.escaping_plainFinal            avgt    3   9.132 ± 0.261  ns/op
ConstructorBarriers.escaping_plainPlain            avgt    3   7.610 ± 0.575  ns/op
ConstructorBarriers.escaping_plainVolatile         avgt    3  13.024 ± 0.460  ns/op
ConstructorBarriers.escaping_volatileFinal         avgt    3  10.697 ± 1.567  ns/op
ConstructorBarriers.escaping_volatilePlain         avgt    3  13.156 ± 0.593  ns/op
ConstructorBarriers.escaping_volatileVolatile      avgt    3  13.707 ± 0.742  ns/op
ConstructorBarriers.non_escaping_finalFinal        avgt    3   2.218 ± 0.299  ns/op
ConstructorBarriers.non_escaping_finalPlain        avgt    3   2.243 ± 0.124  ns/op
ConstructorBarriers.non_escaping_finalVolatile     avgt    3   2.227 ± 0.032  ns/op
ConstructorBarriers.non_escaping_plainFinal        avgt    3   2.226 ± 0.208  ns/op
ConstructorBarriers.non_escaping_plainPlain        avgt    3   2.229 ± 0.112  ns/op
ConstructorBarriers.non_escaping_plainVolatile     avgt    3   2.239 ± 0.400  ns/op
ConstructorBarriers.non_escaping_volatileFinal     avgt    3   2.255 ± 0.259  ns/op
ConstructorBarriers.non_escaping_volatilePlain     avgt    3   2.206 ± 0.098  ns/op
ConstructorBarriers.non_escaping_volatileVolatile  avgt    3   2.203 ± 0.099  ns/op

After:

Benchmark                                          Mode  Cnt   Score   Error  Units
ConstructorBarriers.escaping_finalFinal            avgt    3   5.919 ± 0.787  ns/op
ConstructorBarriers.escaping_finalPlain            avgt    3   5.949 ± 0.117  ns/op
ConstructorBarriers.escaping_finalVolatile         avgt    3  10.947 ± 1.353  ns/op
ConstructorBarriers.escaping_plainFinal            avgt    3   5.897 ± 0.039  ns/op
ConstructorBarriers.escaping_plainPlain            avgt    3   7.737 ± 3.529  ns/op
ConstructorBarriers.escaping_plainVolatile         avgt    3  13.182 ± 0.289  ns/op
ConstructorBarriers.escaping_volatileFinal         avgt    3  10.951 ± 0.535  ns/op
ConstructorBarriers.escaping_volatilePlain         avgt    3  13.086 ± 0.258  ns/op
ConstructorBarriers.escaping_volatileVolatile      avgt    3  13.765 ± 2.114  ns/op
ConstructorBarriers.non_escaping_finalFinal        avgt    3   2.234 ± 0.064  ns/op
ConstructorBarriers.non_escaping_finalPlain        avgt    3   2.226 ± 0.298  ns/op
ConstructorBarriers.non_escaping_finalVolatile     avgt    3   2.212 ± 0.085  ns/op
ConstructorBarriers.non_escaping_plainFinal        avgt    3   2.214 ± 0.033  ns/op
ConstructorBarriers.non_escaping_plainPlain        avgt    3   2.226 ± 0.114  ns/op
ConstructorBarriers.non_escaping_plainVolatile     avgt    3   2.220 ± 0.042  ns/op
ConstructorBarriers.non_escaping_volatileFinal     avgt    3   2.244 ± 0.146  ns/op
ConstructorBarriers.non_escaping_volatilePlain     avgt    3   2.235 ± 0.083  ns/op
ConstructorBarriers.non_escaping_volatileVolatile  avgt    3   2.230 ± 0.056  ns/op

Copy link
Member

@shipilev shipilev left a comment

Choose a reason for hiding this comment

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

This looks nearly complete. I think for sanity reasons we still want the diagnostic flag that could be used to restore old behavior for in-field diagnostics. This is especially important since we are touching the optimizer code. Turning the flag off should restore all behavior, including the optimizer paths.

Something like UseStoreStoreForInit?

Comment on lines 242 to 244
@IR(failOn = IRNode.MEMBAR_RELEASE)
@IR(failOn = IRNode.MEMBAR_STORESTORE)
@IR(failOn = IRNode.MEMBAR_RELEASE)
Copy link
Member

Choose a reason for hiding this comment

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

Here and later: Looks weird to test for MEMBAR_RELEASE twice. Also, should it be just failOn = IRNode.MEMBAR?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Meant to test for MEMBAR_VOLATILE. We can't fail on all MEMBAR because there are some cases that have MEMBAR_ACQUIRE. Added those checks in latest commits.

@caojoshua
Copy link
Contributor Author

Can we also add statistic about how many different barriers C2 generates and eliminates? It will help to know if we missing some optimization with these changes.

Added these statistics. Example output: Barriers generated = 4, Barriers eliminated = 1

I think there are missing cases for barriers eliminated. There could be cases of aside from MemBarNode::remove()

@openjdk openjdk bot removed the ready Pull request is ready to be integrated label Apr 5, 2024
storestore_worklist.append(n->as_MemBarStoreStore());
if (!UseStoreStoreForCtor || n->req() > MemBarNode::Precedent) {
storestore_worklist.append(n->as_MemBarStoreStore());
}
Copy link
Member

Choose a reason for hiding this comment

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

This case and the next case could use a more detailed explanation. We have 4 different possible inputs:
{StoreStore, Release} x {w/ Precedent, w/o Precedent} and 2 possible outcomes: worklist or record_for_optimizer. It's not obvious to me that we are doing the right thing for all cases, both in the old code and the new code.
Previously, I believe this optimization did not apply to the end-of-ctor-with-final barrier, but now it does. If it should always apply, then shouldn't it also apply to the Release barrier when !UseStoreStoreForCtor?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This case and the next case could use a more detailed explanation. We have 4 different possible inputs:
{StoreStore, Release} x {w/ Precedent, w/o Precedent} and 2 possible outcomes: worklist or record_for_optimizer.

We can eliminate barriers when it's precedent is an escaping object. If the barrier does not have a precedent, we cannot elide it, which is why we don't include it in the worklist / record_for_optimizer.

I think its confusing because StoreStore barriers are optimized in escape.cpp, while Release barriers are optimized in memnode.cpp. I would have preferred if all escape-based on optimizations of barriers were just done in one place.

Previously, I believe this optimization did not apply to the end-of-ctor-with-final barrier, but now it does.

This is correct. End of ctor did not have StoreStore barriers. They had Release barriers, which escape analysis already handles. We have to check n->req() > MemBarNode::Precedent, or else we run into assertion errors here

Copy link
Member

Choose a reason for hiding this comment

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

I would have preferred if all escape-based on optimizations of barriers were just done in one place.

It sounds like there is still some cleanup that could be done in this area. Is it worth a separate RFE?

Copy link
Contributor Author

@caojoshua caojoshua Apr 10, 2024

Choose a reason for hiding this comment

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

@liach
Copy link
Member

liach commented Apr 5, 2024

On a side note, would it be safe to replace explicit constructor emulation release barriers (Unsafe.storeFence) elsewhere in the JDK with storeStore, like in ClassValue, MutableCallSite, ClassSpecializer.Factory, ObjectInputStream, and Properties?

caojoshua and others added 2 commits April 8, 2024 08:56
some formatting suggestions from @shipilev

Co-authored-by: Aleksey Shipilëv <shipilev@amazon.de>
@caojoshua
Copy link
Contributor Author

On a side note, would it be safe to replace explicit constructor emulation release barriers (Unsafe.storeFence) elsewhere in the JDK with storeStore, like in ClassValue, MutableCallSite, ClassSpecializer.Factory, ObjectInputStream, and Properties?

I don't think its safe in general. Maybe for some of the use cases it would be desirable. Unsafe.storeFence is marked for removal anyway. Consumers can use VarHandle.storeStoreFence if it fits.

@shipilev
Copy link
Member

@TheRealMDoerr, @GoeLin -- I think you'd want to ack that covering "IRIW" parts with just a StoreStore is okay here. I think it is, since we "just" want the same semantics for volatile-s as for final-s.

@TheRealMDoerr
Copy link
Contributor

@TheRealMDoerr, @GoeLin -- I think you'd want to ack that covering "IRIW" parts with just a StoreStore is okay here. I think it is, since we "just" want the same semantics for volatile-s as for final-s.

Correct, a StoreStore barrier is sufficient. Thanks for the notification!

* @bug 8300148
* @summary Test barriers emitted in constructors
* @library /test/lib /
* @requires os.arch=="aarch64" | os.arch=="x86_64" | os.arch=="amd64"
Copy link
Member

Choose a reason for hiding this comment

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

Hi, Could you please enable this test for riscv64 as well? It passes on linux-riscv64 (fastdebug build).
@requires os.arch=="aarch64" | os.arch=="riscv64" | os.arch=="x86_64" | os.arch=="amd64"

@shipilev
Copy link
Member

All right, checking, are we still good here? We need someone else to ack as well. Maybe @theRealAph would be interested to sanity-check this? @vnkozlov, would you like to run this through Oracle testing?

@vnkozlov
Copy link
Contributor

@TobiHartmann submitted tier1-3,stress,xcopm testing for version v11 yesterday. Testing passed - no new failures.

Copy link
Contributor

@vnkozlov vnkozlov left a comment

Choose a reason for hiding this comment

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

Good.

@openjdk openjdk bot added the ready Pull request is ready to be integrated label Apr 23, 2024
@shipilev
Copy link
Member

Our internal testing completes fine as well, including aggressive compiler testing with jcstress, CTW runs and Fuzzers. Looks like we are ready to go.

@caojoshua
Copy link
Contributor Author

/integrate

@openjdk openjdk bot added the sponsor Pull request is ready to be sponsored label Apr 24, 2024
@openjdk
Copy link

openjdk bot commented Apr 24, 2024

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

@shipilev
Copy link
Member

/sponsor

@openjdk
Copy link

openjdk bot commented Apr 24, 2024

Going to push as commit 1d06170.
Since your change was applied there have been 79 commits pushed to the master branch:

  • f1d0e71: 8324577: [REDO] - [IMPROVE] OPEN_MAX is no longer the max limit on macOS >= 10.6 for RLIMIT_NOFILE
  • 74b11cc: 8331004: Serial: Remove unused GenClosure
  • 45ed97f: 8330464: hserr generic events - add entry for the before_exit calls
  • e311ba3: 8330626: ZGC: Windows address space placeholders not managed correctly
  • e923dfe: 8314592: Add shortcut to SymbolLookup::find
  • 1519081: 8330303: Crash: assert(_target_jt == nullptr || _target_jt->vthread() == target_h()) failed
  • 2bb5cf5: 8330155: Serial: Remove TenuredSpace
  • 7bb59dc: 8330670: Obsolete ScavengeBeforeFullGC
  • 174d626: 8328741: serviceability/jvmti/ObjectMonitorUsage/ObjectMonitorUsage.java failed with unexpected owner
  • e681e9b: 8330819: C2 SuperWord: bad dominance after pre-loop limit adjustment with base that has CastLL after pre-loop
  • ... and 69 more: https://git.openjdk.org/jdk/compare/235ba9a7025964b1e43149c7102e26b82b2081ad...master

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label Apr 24, 2024
@openjdk openjdk bot closed this Apr 24, 2024
@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 Apr 24, 2024
@openjdk
Copy link

openjdk bot commented Apr 24, 2024

@shipilev @caojoshua Pushed as commit 1d06170.

💡 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
hotspot-compiler hotspot-compiler-dev@openjdk.org integrated Pull request has been integrated
Development

Successfully merging this pull request may close these issues.

7 participants