У меня всегда был такой вопрос, когда я работал над одним из моих приложений, которое создавало огромное количество потоков на запрос.
Так что это действительно хороший вопрос, и здесь есть два аспекта:
1. Должны ли мои значения Xms и Xmx быть одинаковыми
- Большинство веб-сайтов и даже документы оракула предлагают, чтобы это было то же самое. Тем не менее, я предлагаю иметь 10-20% буфера между этими значениями, чтобы дать возможность изменения размера кучи для вашего приложения в случае внезапного большого скачка трафика или случайной утечки памяти.
2. Должен ли я запускать свое приложение с меньшим размером кучи
- Так вот в чем дело - независимо от того, какой GC Algo вы используете (даже G1), в большой куче всегда есть компромисс. Цель состоит в том, чтобы определить поведение вашего приложения до размера кучи, который вы можете разрешить паузам GC с точки зрения задержки и пропускной способности.
- Например, если ваше приложение имеет много потоков (каждый поток имеет 1 МБ стека в собственной памяти, а не в куче), но не занимает многообъемное пространство, я предлагаю иметь более низкое значение Xms.
- Если ваше приложение создает множество объектов с возрастающим числом потоков, определите, какое значение Xms можно установить, чтобы допустить эти паузы STW. Это означает, что вы можете определить максимальное время ответа на ваши входящие запросы и настроить минимальный размер кучи.