Большая часть места в сети, я получаю ниже информации о параметрах кучи
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
Вот мое понимание/вопрос, когда я упоминаю параметры -Xms 512M -Xmx 2048M
,
-Xms: - Мое понимание заключается в том, что для моего Java-процесса на самом деле требуется только 200M с упоминанием -Xms 512M, java-процесс по-прежнему будет назначен только 200M (требуется фактическая память) вместо 500M, Но если я уже знаю, что мое приложение собирается взять эту 512M-память при запуске, то указание меньше, чем будет иметь влияние на производительность, так как любой кусок блока должен быть изменен, что является дорогостоящей операцией.
За обсуждение с моим коллегой. По умолчанию GC будет срабатывать на 60% от значения Xms. Это верно? Если да, то это небольшой GC или полный GC, который зависит от значения Xms?
Обновление на Xms: - Это кажется правдой после прочтения параметров кучи JVM, но по умолчанию это значение 60%, и является ли это незначительным или полным GC, который зависит от значения Xms?
-Xmx: - Мое понимание заключается в упоминании -Xmx 2048M, Java-процесс на самом деле собирается зарезервировать память 2048M для его использования с ОС, так что другому процессу не может быть предоставлена его доля. Если Java-процесс, необходимый как угодно больше, чем 2048M памяти, тогда из памяти будет выброшено.
Кроме того, я считаю, что существует некоторое отношение триггера Full GC к значению -Xmx. Поскольку я наблюдал, когда память достигает около 70% Xmx, Full GC происходит в jconsole. Это правильно?
Конфигурация: Я использую linux box (64-битный JVM 8). По умолчанию GC i.e Parallel GC