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.

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

Commit messages:
 - Minor javadoc fix
 - Merge branch 'master' into remove_generics_heap_segments
 - Initial push

Changes: https://git.openjdk.java.net/jdk18/pull/97/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk18&pr=97&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8279930
  Stats: 199 lines in 3 files changed: 172 ins; 0 del; 27 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