Распределение и выпуск памяти в Java и C# автоматически управляются виртуальными машинами. Ранее я ввел метод переработки объектов GC в CLR, которая представляет собой стратегию утилизации памяти на основе поколений. Фактически, в Java стратегия переработки объектов JVM также основана на идее разделения поколений. Цель этого - увеличить мусор
Производительность переработки позволяет избежать задержки в ответе программы, вызванной проверкой всех объектов в куче, потому что, когда JVM выполняет GC, оно останавливает слово, то есть завершает работу других потоков и только восстанавливает операции других потоков после завершения переработки. Идея, основанная на разделении поколений: JVM нуждается в небольшой части памяти каждый раз, когда он выполняет сборщик мусора.
Ссылки на объекты проверяются, и это небольшое количество объектов имеет более короткий жизненный цикл, который ускоряет производительность коллекции мусора. Ниже мы представим основные стратегии алгоритмов восстановления памяти на основе поколений в Java в будущем:
1. Разделение генерации памяти с кучей JVM
В стратегии восстановления памяти на основе поколения пространство кучи обычно делится на 3 поколения, молодое поколение, старое поколение (или постоянное поколение) и постоянное поколение. Среди молодого поколения есть три небольших областях: Eden, S0 и S1, как показано на рисунке ниже:
Среди них новые объекты всегда присваиваются поколению возраста. Когда пространство молодого поколения заполнено, необходимо выполнить сбор мусора, то есть выполняется незначительный GC, для переработки объектов, на которые больше не упоминаются, и в то же время увеличить возраст выживших объектов. Выжившие объекты в поколении возраста имеют поле идентификации возраста. Как только они достигнут определенного порога, все еще выжившие объекты будут продвигаться в пространстве старого поколения.
Пространство старого поколения используется для хранения объектов, которые выжили в течение долгого времени, то есть объекты с долгим жизненным циклом. Как только выжившие объекты в пространстве молодого поколения достигнут определенного возрастного порога, он будет автоматически продвигаться до старого поколения. Когда пространство старого поколения будет заполнено объектами, майор GC будет выполнен один раз. По сравнению с незначительным GC число выполнения основного GC намного меньше, чем у незначительного GC. В то же время майор GC выполняется дольше, чем незначительный GC. Потому что это включает в себя больше сканирования объектов. Эта идея поколений также основана на лучшем выборе на практике, что на практике недавно выделенные объекты имеют более короткий жизненный цикл, а пожилые объекты имеют более длительный жизненный цикл.
В то же время, когда незначительный GC и Major GC выполняют коллекцию мусора, они принимают событие Stop The World, то есть прекращают текущие потоки и восстанавливают все потоки при выполнении GC.
Для памяти постоянной генерации он в основном используется для хранения соответствующей информации о метаданных, информации о классах и методах. Когда класс больше не используется, он будет переработан. При выполнении полного GC, память постоянного генерации будет отсканирована на предмет сбора мусора.
2. Процесс обработки сбора мусора на основе генерации
Во -первых, в начале новый объект назначен в область Eden, S0 и S1 пусты. Когда пространство в Эдеме заполнено, один раз выполните второстепенный GC. Коллекционер мусора перенесет ссылочный объект в область S0, а объекты, на которые больше не упоминаются, будут удалены. В то же время возраст выжившего объекта составляет 1. После идентификации GC области Eden и S1 пусты, как показано на рисунке ниже.
В следующий раз, когда будет выполнено незначительный GC, так же, как и предыдущие шаги выполнения, единственное отличие состоит в том, что ссылочный объект, то есть выживший объект, будет перемещен в область S1, а возраст объекта, выживаемого в области S0, увеличится на 1 и станет 2, как показано на рисунке ниже.
Когда незначительный GC снова выполнен, выживший объект будет перемещен в область S0 и добавит 1 в возраст выжившего объекта, как показано на рисунке ниже
Когда незначительный GC наконец выполняется, обнаруживается, что выживший объект в S1 достигает 8 (при условии, что порог устанавливается на 8), а объект будет продвигаться в памяти старого возраста, как показано на рисунке ниже.
Z.
Когда старое пространство кучи заполнено объектами, майор GC будет выполнен один раз, что очистит объекты, что старая куча больше не ссылается, и в то же время сжимает пространство. Как показано на рисунке ниже.
Приведенное выше краткое обсуждение стратегии переработки мусора в JVM - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.