Вывоз мусора газель
Сбор и
вывоз мусора газель восстанавливает пространство кучи,
ранее выделенное для объектов, которые больше не
нужны. Процесс обнаружения и удаления мертвых
объектов может остановить любое приложение и
потреблять до 25 процентов пропускной способности.
Почти во всех средах среды Java Runtime есть система
памяти объектов поколений и сложные алгоритмы GC.
Система памяти поколений делит кучу на несколько
тщательно распределенных разделов, называемых
поколениями. Эффективность системы памяти поколений
основана на наблюдении, что большинство объектов
недолговечны. Когда эти объекты накапливаются,
возникает условие низкой памяти, заставляющее GC
проходить.
Кучевое пространство делится на старое и новое
поколение. Новое поколение включает в себя новое
пространство объектов (eden) и два оставшихся в
живых. JVM выделяет новые объекты в пространстве
eden и перемещает более длинные объекты из нового
поколения в прежнее поколение.
Молодое поколение использует быстрый копировальный
сборщик мусора, который использует два
полупространства (оставшиеся в живых) в eden,
копируя выжившие объекты из одного оставшегося в
прошлое пространства во второе. Объекты, которые
выживают из нескольких коллекций молодых космических
аппаратов, имеют смысл, то есть они копируются в
поколение поколений. Накопительное поколение больше
и заполняется быстрее. Таким образом, сбор мусора
происходит реже; и каждая коллекция занимает больше
времени, чем коллекция только молодого пространства.
Сбор владения пространством также упоминается как
сборка полного поколения.
Частые коллекции молодых космических аппаратов
быстрые (несколько миллисекунд), в то время как
коллекция полного поколения занимает больше времени
(от десятков миллисекунд до нескольких секунд, в
зависимости от размера кучи).
Другие алгоритмы GC, такие как алгоритм Concurrent
Mark Sweep (CMS), являются инкрементальными. Они
делят полный GC на несколько дополнительных частей.
Это обеспечивает высокую вероятность небольших пауз.
Этот процесс связан с накладными расходами и не
требуется для корпоративных веб-приложений.
Когда новое поколение заполняется, оно запускает
небольшую коллекцию, в которой выжившие объекты
перемещаются в старое поколение. Когда старое
поколение заполняется, оно запускает большую
коллекцию, которая включает всю кучу объекта.
И HotSpot, и Solaris JDK используют потоковые
локальные пулы распределения потоков для блокировки,
быстрого и масштабируемого распределения объектов.
Таким образом, сбор нестандартных объектов часто не
требуется. Рассмотрите объединение только в том
случае, если стоимость строительства объекта высока
и существенно влияет на профили выполнения.
Выбор алгоритма сбора мусора
Паузы во время полного GC более четырех секунд могут
вызвать прерывистые сбои в сохранении данных сеанса
в HADB.
В то время как GC продолжается, Сервер приложений не
работает. Если пауза достаточно продолжительная,
HADB сбивает существующие соединения. Затем, когда
сервер приложений возобновляет свои действия, HADB
генерирует ошибки, когда сервер приложений пытается
использовать эти соединения для сохранения данных
сеанса. Он генерирует такие ошибки, как «Не удалось
сохранить данные сеанса», «Транзакция отменена» или
«Не удалось подключиться к серверу HADB».
Чтобы предотвратить эту проблему, используйте
сборщик CMS в качестве алгоритма GC. Этот коллектор
может привести к снижению пропускной способности для
сильно используемых систем, поскольку он работает
более или менее постоянно. Но это предотвращает
длительные паузы, которые могут возникнуть, когда
сборщик мусора работает нечасто.
Дата:
22.02.2018.
|