> Hello, > > ZGC optimizes initialization by performing segmented clearing for objArrays, > which reduces time-to-safepoint. In the lworld branch, we currently opt out > of segmented clearing if the objArray being initialized is a flatArray. This > prevents us from taking advantage of shorter time-to-safepoints when the > flatArray could be cleared in segments. > > The main question is: which types of flatArrays should support segmented > clearing? Since ZGC only supports 64-bit atomic operations, flatArrays > containing oops are not possible without relying on internal-only features > like loose-consistency and null-restriction. A value object containing an oop > and the added null-marker will always exceed 64 bits with ZGC, and therefore > such objects will not be flattened in practice due to the 64-bit atomicity > constraint. > > Given this, we are currently missing the opportunity to use segmented > clearing for flatArrays that contain only primitive types, which we should > add support for. Support for flatArrays containing oops can be considered in > the future, once features like loose-consistency and null-restriction are > available to the user. > > Testing: > * hotspot_valhalla, jdk_valhalla, tier1-4, with `-XX:+UseZGC` > > * Some sanity testing in lldb to see if I get segmented clearing for any > flatArrays, and I can see several flatArrays containing java/lang/Integer or > java/lang/Character being cleared in segmentes.
Joel Sikström has updated the pull request incrementally with one additional commit since the last revision: Offline review feedback ------------- Changes: - all: https://git.openjdk.org/valhalla/pull/1811/files - new: https://git.openjdk.org/valhalla/pull/1811/files/d25f1542..bf305dcc Webrevs: - full: https://webrevs.openjdk.org/?repo=valhalla&pr=1811&range=01 - incr: https://webrevs.openjdk.org/?repo=valhalla&pr=1811&range=00-01 Stats: 30 lines in 1 file changed: 17 ins; 13 del; 0 mod Patch: https://git.openjdk.org/valhalla/pull/1811.diff Fetch: git fetch https://git.openjdk.org/valhalla.git pull/1811/head:pull/1811 PR: https://git.openjdk.org/valhalla/pull/1811
