RFR: JDK-8221848: Shenandoah: ArrayCopy post-barrier improvements
Zhengyu Gu
zgu at redhat.com
Thu Apr 4 19:14:11 UTC 2019
Looks good.
-Zhengyu
On 4/3/19 12:41 PM, Roman Kennke wrote:
> Just like the arraycopy pre-barrier, the arraycopy post-barrier should
> check for count == 0 and UPDATEREFS gc-state in the generated stubs to
> avoid calling into the runtime at all in those cases. The runtime can
> then elide checking this.
>
> Why is this relevant? Because calling into runtime involves storing and
> restoring *all registers* around the call. That would be 32 (x86) or 64
> (aarch64) memory accesses to do nothing at all (outside
> update-refs-phase or when dealing with empty arraycopy).
>
> This change proposes to slightly change the meaning of the UPDATEREFS
> state: so far it would only be active during the dedicated update-refs
> phase after evacuation. Updating-references while marking would not have
> this flag. However, arraycopy is the only place where we use this flag
> at all, and we use it to determine if current GC phase is actually
> updating references. I suggest to also activate it during marking (when
> updating references) and traversal (always also updating references).
> Then we can make the check in assembly very simple.
>
> Bug:
> https://bugs.openjdk.java.net/browse/JDK-8221848
> Webrev:
> http://cr.openjdk.java.net/~rkennke/JDK-8221848/webrev.00/
>
> Testing: hotspot_gc_shenandoah (x86_64 and aarch64)
>
> Ok?
>
> Roman
More information about the shenandoah-dev
mailing list