Подтвердить что ты не робот

Кто-нибудь нашел настройку Garbage Collection полезной?

Я прочитал много статей о настройке GC на Java и часто задавался вопросом, сколько людей действительно используют некоторые из более продвинутых функций.

Я всегда избегал настройки, где это было возможно, и сосредоточился на написании простейшего возможного кода, который я могу (совет Брайана Гетца) - это, похоже, до сих пор хорошо работало для меня.

Являются ли эти стратегии настройки устойчивыми для изменения в версиях VM или требуется постоянная переоценка?

Единственной настройкой, которую я использовал, является флаг -server.

4b9b3361

Ответ 1

Часть моей текущей работы - это забота и подача большого приложения Java, предназначенного для работы с большим объемом памяти (в настоящее время около 8 ГБ), в основном из-за текущих расчетов с большим количеством кэшированных данных. Я сделал первоначальное развертывание со стандартной установкой GC, главным образом потому, что не было простого способа имитировать производственную среду, работающую при полном наклоне.

Поэтапно, в течение следующих нескольких месяцев, я настроил настройки GC. Как правило, самая большая доступная ручка, по-видимому, регулирует частоту и величину инкрементного gc - наибольшее улучшение было в торговле с большим периодическим gc для более мелких и более частых. Но мы определенно смогли увидеть улучшения производительности.

Я не буду публиковать свои конкретные настройки, потому что они специфичны для нашей установки, и б), потому что у меня нет их удобных:). Но в общем, я нашел

  • была проделана большая работа настройка настроек gc по умолчанию. Почти всегда настройки по умолчанию работают лучше, чем любые твики, которые я бы сделал.
  • По крайней мере для меня, ситуации, когда Настройка gc была действительно стоящей были достаточно экстремальными, необоснованно пытаться имитировать их, поэтому я должен был это сделать экспериментально и постепенно.

Вот хорошая ссылка из превью. Обсуждение stackoverflow.

Ответ 2

Подавляющее большинство разработчиков никогда не захотят (или хотят) настроить GC. Я работал с людьми, которым приходилось его настраивать, и вот совет:

Прежде чем пытаться настроить мусор сборщик 100% уверен, что у вас есть проверено, с профилировщиком. что продолжается. Как только вы начнете настройку make убедитесь, что вы проверяете с помощью профилировщика, что это имело положительный эффект.

Вы также должны просмотреть изменения с каждой версией виртуальной машины, на которой вы работаете (разные виртуальные машины будут иметь разные стратегии настройки).

Я когда-то помогал кому-то с проблемой GC, которая оказалась не закрывающей наборы результатов JDBC (или некоторые подобные проблемы). Это привело к тому, что память никогда не была освобождена (по какой-то причине его код удерживался на них). Исправление этой проблемы заставило программу перейти от 20 минут к чему-то вроде 30 секунд или пару минут. Использование памяти также снизилось.

Ответ 3

Я должен сказать, что у меня не было необходимости самостоятельно настраивать настройки. Но я тесно сотрудничаю с людьми, которые пишут код, где критическая задержка: они используют эту настройку в значительной степени, указывая, какой алгоритм GC использовать, максимальное время паузы, коэффициенты выживаемости и т.д.

Я думаю, что ответ заключается в следующем: если задержка имеет решающее значение для приложения, вам может потребоваться настроить ваш GC

Ответ 4

Я бы сказал, что наиболее распространенная мелодия - это максимальный размер памяти. Большинство других опций памяти имеют разумные значения по умолчанию и часто превышают настроенный IMHO. т.е. установить, когда это действительно не имеет большого значения. Я часто вижу, что люди задают множество вариантов, когда половина из них по умолчанию в любом случае.;)

Использование профилировщика является наиболее полезным способом улучшения поведения GC (путем сокращения количества созданных объектов)

Ответ 5

У меня есть, но совсем недавно. Приложение, над которым я работал, - это рендеринг видеопотока в реальном времени, построенный из отдельных изображений в формате JPEG. В то время (около JDK 1.2 и 1.3) параметр -Xincgc переключил сборщик мусора клиента с большей части очистки большого взрыва в режим, в котором часть мусора регулярно очищалась. В результате распределение латентностей кадров было намного ниже, создавая впечатление более плавного видео (вместо 1-2-3-паузы, 1-2-3-паузы).

Я не смотрел этот код довольно долго, но я сильно подозреваю, что с современными алгоритмами сбора мусора -Xincgc фактически снизит производительность.

В сегодняшнем мире я бы сказал, что всегда должен применяться стандартный оптимизационный скептицизм: профиль профиля профиля. Вы уверены, что узким местом является сборщик мусора...?

Ответ 6

Короче говоря, да, это очень полезно для настройки любого серьезного Java-приложения. Мы часто находили, что в производственных сценариях это разница между стабильным приложением и совершенно непредсказуемым приложением. Это, конечно, не первое, что я делаю, но как только вы работаете с приложением и можете применить к нему реальную нагрузку, это одна из первых вещей, которые нужно исследовать в этот момент.