В JVM есть четыре общих алгоритма сбора мусора:
Алгоритм очистки от марки (Mark-Sweep);
Копирование алгоритма (копирование);
Марк-Компакт;
Коллекция поколений;
Давайте представим это один за другим:
1. Алгоритм чистки от марки (Mark-Sweep)
Это самый простой алгоритм сбора мусора. Алгоритм разделен на два этапа: «маркировка» и «очистка»: во -первых, все объекты, которые необходимо переработать, отмечены, и все отмеченные объекты равномерно переработаны после завершения маркировки. Его основные недостатки составляют два: один - проблема с эффективностью, а эффективность маркировки и очистки не высока; Другая - проблема с пространством, после того, как маркировка будет очищена, будет создано большое количество прерывистых фрагментов памяти. Слишком много космических фрагментов могут вызвать недостаточное большее непрерывное пространство при распределении больших объектов, а еще одно действие сбора мусора должно быть вызвано заранее.
Марк-ячейка схема алгоритма
2. Копирование алгоритма (копирование)
Чтобы решить проблему эффективности с алгоритмом «копия», он делит доступную память на два блока одного размера. Используйте только один кусок за раз. Когда используется один кусок пространства, скопируйте все еще подсудимый объект в другой кусок, а затем за один раз очистите новое пространство памяти. Это позволяет перерабатывать одну из частей каждый раз, чтобы фрагментация памяти и другие сложные ситуации не обязательно рассматриваться при распределении памяти. Простая реализация и эффективная работа. Но стоимость этого алгоритма состоит в том, чтобы уменьшить память до половины оригинала, что слишком дорого. Фактически, 98% объектов в новом поколении живут и умирают, поэтому нет необходимости разделять память на соотношение 1: 1, но делят память на более широкое пространство Eden и два меньших пространства выживших, каждый раз, используя пространство Eden и одно из пространств Survivor. При переработке, скопируйте все еще выживающие объекты в Эдеме и выжившего в другой суйворист одновременно и, наконец, очистите пространство Эдема и недавно используемого выжившего.
Копировать диаграмма алгоритма
3. Марк-Компакт
Когда скорость выживаемости объекта высока, алгоритм репликации и сбора должен выполнять больше операций репликации, а эффективность станет ниже. Что еще более важно, если вы не хотите тратить 50% пространства, вам нужно иметь дополнительное пространство, чтобы распределить гарантии, чтобы справиться с чрезвычайной ситуацией, когда все объекты в полузонной памяти оживляют на 100%, поэтому этот алгоритм не может быть непосредственно использовать у пожилых людей.
Поэтому люди предложили еще один алгоритм «маркировки». Поскольку объекты у пожилых людей имеют длительный цикл выживания, некоторые люди предложили алгоритм «комбинированного». Процесс маркировки такой же, как и «очистка марки», но при очистке мертвых объектов будут отсортированы выжившие объекты, которые могут уменьшить фрагментированное пространство.
Диаграмма алгоритма маркировки
4. Коллекция поколений
В настоящее время сборник мусора для коммерческих виртуальных машин принимает алгоритм «Коллекции поколений». В этом алгоритме нет новой идеи, но память делится на несколько частей в соответствии с различными циклами выживания объекта. Как правило, кучи Java делятся на новое поколение и старое поколение, так что наиболее подходящий алгоритм сбора может использоваться в соответствии с характеристиками каждого поколения. В новом поколении каждый раз, когда собирается сборы мусора, большое количество объектов обнаруживается мертвыми, и только небольшое число выживает. Затем используйте алгоритм копирования, и коллекция может быть завершена с небольшим количеством стоимости копирования. У пожилых людей, потому что выживаемость объектов высока, а цикл длинный, алгоритм «Mark-Tidy» или «Mark-Clear» используется для его переработки.
Вышеуказанное введение в общие алгоритмы сбора мусора в JVM - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.