Обновить

Комментарии 8

5 за доступность для новичков! Очень легкий стиль изложения и с картинками)
Спасибо! Продолжение будет уже более детальным и, надеюсь, интересным не только новичкам. Картинки тоже обещаю, не переключайтесь)
Тег «java memory model» в этом посте явно лишний. Уберите его, пожалуйста.

Моделью памяти в языке Java называется совершенно другая вещь, а именно фрагмент спецификации языка Java, $17.4 JLS.

Более того, насколько я помню, с точки зрения стандарта Java SE 8 (7, 6, 5 и др.), GC нет ни в спецификации языка, ни в спецификации виртуальной машины. Он есть только в библиотеке классов в виде System.gc() и Runtime.gc().
Про memory model согласен, убрал из тегов.
А что можно почитать о самих алгоритмах сборки мусора в принципе? С псевдокодом и сравнением по разным параметрам? Про The Garbage Collection Handbook слышал, но что-то мне подсказывает, что она слишком академичной окажется.
Есть еще Garbage Collection: Algorithms for Automatic Dynamic Memory Management с псевдокодом и сравнениями. В открытом доступе можно найти ее очень плохой скан, но по нему сможете сделать заключение о степени академичности. Мне показалась вполне практичной, но я ее не целиком читал, а только выборочно интересующие меня главы.

Кажется, здесь «пропускная способность» фактически определяется как отношение времени работы приложения к суммарному времени stop-the-world-пауз. Для сборщиков, у которых основная работа выполняется в STW-фазах, это может быть полезным приближением, но для concurrent GC такая оценка уже не характеризует фактическую производительность приложения.

В предельном случае сборщика без глобальных STW-фаз — Azul C4 можно считать близким практическим приближением, — суммарное время пауз стремится к нулю, а значение метрики неограниченно растёт. Реальный throughput при этом остаётся конечным и может снижаться из-за накладных расходов: служебного кода GC при чтении и записи ссылок (GC barriers), конкуренции за CPU, кэши и пропускную способность памяти, а также приостановок потоков при выделении памяти.

Поэтому throughput, вероятно, точнее измерять как объём полезной работы за единицу wall-clock-времени при заданных ограничениях по CPU и памяти, а характеристики пауз и потребление ресурсов учитывать отдельно.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации