Можно ли изменить приоритет потока GC?
Я действительно считаю, что это Неправильный вопрос. Вы не хотите влиять на приоритет такой критической фоновой операции. Это может, в зависимости от архитектуры потока, голодать поток GC и сбивать JVM.
Я думаю, что способ уменьшить количество CPU, используемого системой GC, - уменьшить количество пропускной способности объекта - уменьшить количество объектов, которые создаются и восстанавливаться. Вы должны использовать профилировщик памяти, чтобы увидеть, какие части вашей системы потребляют слишком много памяти или используют слишком много временных объектов.
Есть много способов, чтобы уменьшить пропускную способность объекта:
- меняющийся использовать изменяемые объекты при необходимости (т.е. там, где объекты не разделяются между потоками)
- очистка и повторное использование коллекции в отличие от реконструкции их
- использованием
StringBuilder
в отличие от серийного String
присоединяет
- использованием SLF4J типа
{}
каротажа
- , возможно, с помощью
ThreadLocal
для хранения состояния объектов, которые могут быть сброшены и повторно
- и т.д ..
Есть много способов, чтобы уменьшить ширину полосы объектного кода и что в конечном итоге будет иметь гораздо большее влияние на производительность памяти от JVM, в отличие от игры с приоритетами потока потоков фоновой системы.
См. Комментарий к @ Voo ниже, чтобы получить хорошее предостережение.
Лучше быть очень осторожным, если «оптимизировать» в этой области. Один пример: недолговечные небольшие объекты - это то, с чем настроен GC, поэтому введение пулов объектов для повторного использования объектов часто может привести к ухудшению производительности (особенно задержка) по дорогам на современных JVM. Молодые генералы GC действительно дешевы! – Voo
Несколько согласен @Voo. Я не уверен, что использование пулов объектов никогда не приводит к ухудшению производительности (если оно не выполняется плохо или требует блокировок синхронизации или что-то в этом роде), но это может означать гораздо больше кода без улучшения производительности. – Gray
Спасибо. В этом случае причина, по которой мы имеем разные приоритеты для потоков GC в дампе потока, состоит в том, что JVM решил поместить разные приоритеты для разных приложений? –