A garbage collection cycle of ZGC has in essential two phases: marking and relocating. During the marking phase in all references to a live object one of the flags marked0 or marked1 is set (the flags are usesd alternatingly by the garbage collection cycles [1]).
For simplicity suppose all objects in the heap are live, i.e. no relocation is needed. (Suppose further that no object is referenced by a finalizer and that no object is created during the gc cycle)
Question: Which flag (i.e. remapped or marked0 / marked1) is set in the references after the garbage collection cycle has finished?
Background: When the application invokes an object, the load barrier checks the flags in the reference and takes action (see the flowchart with the blue shapes in [2]). The remapped flag indicates that the reference is up to date, i.e. the object can be directly accessed by the reference. If the remapped flag is not set, more checking is required, thus decreasing performance of the app. Therefore, it would be desireable, if the garbage collector would set the remapped flag. However, just one of the flags remapped, marked0, marked1 is set at any point in time ([2] "Multi-mapping"). Since in the marking phase marked0 / marked1 is set, I believe, that remapped can't be set by the ZGC garbage collector. What disturbs me is that then performance of the app after the gc cycle would be worser than before the cycle.
[1] https://dinfuehr.github.io/blog/a-first-look-into-zgc
[2] https://www.opsian.com/blog/javas-new-zgc-is-very-exciting