Когда GC запускается и перемещает объекты из Young (на S0 или S1), тогда мертвый объект не копируется и, следовательно, выброшен. Объекты перемещаются несколько раз назад и вперед между S0 и S1 до тех пор, пока они не умрут или они не станут достаточно старыми, чтобы быть перенесены в Старое пространство.
S0 и S1 - пространство для хранения между Молодым (Eden) и Старинным пространством.
GC работает так долго, что есть объекты для копирования, отбрасывая всех мертвых. Полный GC выполняется, когда память действительно нуждается в восстановлении, например, объекты должны быть удалены из Старого пространства.
Самый быстрый способ очистить пространство Яблока - это на самом деле ждать до тех пор, пока большинство объектов не будет мертвым, поэтому вам не придется копировать столько, сколько нужно для S0 | S1, а затем и для старого.
Таким образом, заполнение памяти, а затем снятие штрафа за более длительный прогон GC на самом деле более эффективно, а затем запуск GC с очень короткими интервалами. Вот почему вы видите, что ваша память растет и растет до тех пор, пока она не будет полностью заполнена, а затем все это снова упадет почти до нуля.
Полный GC - это StopTheWorld, это необходимо для переупорядочения объектов в куче в старом пространстве, оно не требуется в пространстве Юнга. Если молодое пространство становится полным для быстрых объектов, их можно продвигать до Старого пространства. Это не очень хорошо, и это тот случай, о котором вы думаете.
Чтобы избежать использования Full GC, вы можете рассчитать, сколько памяти вам понадобится в Young Space с темпом создания, который вы должны убедиться, что объекты не будут продвигаться до этого.Также возможно настроить размер пространства S0 и S1 и сколько раз объекты будут отскакивать между ними до того, как они окажутся в Старом пространстве (требуется, чтобы Full GC был удален).
Хорошая ссылка, но немного старая на этом Tuning Garbage Collection