Java JVM по умолчанию сборщик мусора: настроен ли он одинаково для разных приложений? - PullRequest
0 голосов
/ 26 февраля 2019

Просто так, как указано в заголовке.

Я запустил тест и записал его шаблон использования кучи памяти с течением времени, используя JMX.Затем я перезапустил свой файл jar и снова изучил поведение памяти.Результатом стал немного другой образец памяти.В обоих случаях я не настроил свой сборщик мусора.Поэтому я хочу узнать, имеют ли два сборщика мусора по умолчанию одинаковые конфигурации на одной и той же машине.

Если нет, как я могу убедиться, что мой сборщик мусора одинаков, не задавая много параметров?Кроме того, что может способствовать моему результату, если не GC config?

1 Ответ

0 голосов
/ 27 февраля 2019

Если вы запустите одно и то же приложение на той же машине с той же JVM, параметры кучи и GC будут одинаковыми.

Эргономика была введена еще в JDK 5.0, чтобы попытаться отгадать некоторые догадки из настройки GC.Машина серверного класса (2 или более ядер и 2 или более ГБ памяти) будет использовать 1/4 физической памяти (до 1 ГБ) как для начального, так и для максимального размера кучи (см. https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html). Так разные машинымогут иметь разные конфигурации по умолчанию.

Чтобы узнать, какие именно флаги вы установили, используйте: java -XX:+PrintFlagsFinal -version

Разница в схеме использования памяти - просто недетерминированное поведение вашего приложения.Даже с тем же набором входных данных, я сомневаюсь, что вы увидите точно такое же поведение памяти, вплоть до многих других ОС и аппаратных эффектов (кеш, привязка ядра и т. Д.)

...