недавно я прочитал несколько статей о ZGC.
например. https://dinfuehr.github.io/blog/a-first-look-into-zgc/
И он сказал, что в ZGC нет барьера записи.
Чтение и запись в куче чрезвычайно распространены, поэтому оба GC-барьера должны быть супер эффективными. Это означает лишь несколько инструкций по сборке в общем случае. Барьеры чтения на порядок больше вероятности, чем барьеры записи (хотя это, безусловно, может варьироваться в зависимости от приложения), поэтому барьеры чтения еще более чувствительны к производительности. Например, GC поколений обычно обходятся только барьером записи, без необходимости читать барьер. ZGC нужен барьер для чтения, но нет барьера для записи. Для одновременного сжатия я не видел решения без барьеров чтения.
Барьер записи не нуждается в одновременном сжатии, но как он делает одновременную метку без барьера записи? некоторые коллекторы, такие как G1, используют трехцветную маркировку и барьер записи SATB + для одновременной маркировки.
И я прочитал из OJ, есть другой способ:
Альтернативный подход состоит в том, чтобы сохранить очередь всех изменений, которые потенциально могут нарушить инвариант, и затем иметь вторичный «этап fixup », который начинается после завершения основного этапа. Различные сборщики могут решить эту проблему с помощью трехцветной маркировки по-разному, в зависимости от таких критериев, как производительность или требуемая степень блокировки.
Интересно, как это работает ... Немного информации об этом после некоторого поиска ... (возможно, мне следует прочитать какой-нибудь исходный код ....