> When looking at larger benchmarks, I noted a discrepancy between the 
> performance of off-heap segments and on-heap segments. Looking at the 
> assembly for the `MemorySegment::asSlice` method I could see some additional 
> barriers in the off-heap case, but could not initially make sense of them. 
> Vlad pointed me at G1 (in fact no such barrier was emitted when using a 
> different GC, such as the serial GC, or ZGC), and later Erik narrowed the 
> problem down to a failure in a C2 optimization to remove barriers around 
> initializing stores. This problem was caused by a synthetic cast added by 
> javac to a value (the base object) that initialized the newly created memory 
> segment slice. Because of that case, C2 missed the store as an "initializing" 
> one, and inserted additional barriers. This patch should make performance of 
> on-heap segments a lot more reliable, especially when slicing is involved.

Maurizio Cimadamore has updated the pull request incrementally with one 
additional commit since the last revision:

  Fix and enhance benchmark

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

Changes:
  - all: https://git.openjdk.java.net/jdk18/pull/97/files
  - new: https://git.openjdk.java.net/jdk18/pull/97/files/af8fb319..712f9fb5

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk18&pr=97&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk18&pr=97&range=01-02

  Stats: 114 lines in 1 file changed: 96 ins; 9 del; 9 mod
  Patch: https://git.openjdk.java.net/jdk18/pull/97.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk18 pull/97/head:pull/97

PR: https://git.openjdk.java.net/jdk18/pull/97

Reply via email to