Ответ 1
Как задается вопрос
почему Java 8 выделяет слишком много памяти на моей машине
Я не думаю, что кто-нибудь сможет ответить, однако есть несколько рекомендаций, которые могут помочь. Учитывая, что вы измеряете память через диспетчер задач, вас интересует общий используемый RSS. Так
- Шаг 1:
Сравните значения по умолчанию JVM между версией, которую вы используете. Вы можете получить их с помощью команды
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version
для обоих jdks. Используя сортировку текста в верхней части вывода, вы сможете получить хороший diff, используя любой инструмент сравнения. Такие вещи, как изменение коллектора GC коллектора и размера стека потоков, очень сильно повлияют на окончательный RSS. - Шаг 2:
Измерьте распределение для каждого пула памяти. В общем случае общая память, используемая java, может быть рассчитана с использованием
heap + metasize + code cache + native + (thread_stack_size * maximum_number_of_threads)
- Память кучи легко измерима (и может быть легко сравнима!!) зрелыми инструментами (Eclipse Memory Analyzer, VisualVM и т.д.). Если память увеличение площади кучи - вам очень повезло. В дополнительном визуальном vm вы можете установить плагин, который будет отображать значения всех пулов памяти, доступных через jmx.
- metasize (aka permgen in jdk < 8) должен быть более/менее равным и может быть найден с помощью инструмента
jmap
. Нет необходимости играть с флагом, вы можете получить номер и просто сравнивать каждый раз, когда он увеличивается или нет. - Кэш кеша: помимо зарезервированного кеша кода вы можете установить начальный кеш кода (и это повлияет на то, сколько RSS используется).
- native: это немного черных овец. Если все остальные пулы памяти равны (память падает на 2 ГБ), потерянная память должна быть где-то в родной области. Единственный инструмент, о котором я знаю, -
jcmd
, и он имеет обширную документацию в документах oracle.
Нетехнические - в то время как настройка различных вариантов для уменьшения памяти может помочь, шансы получить правильные значения близки к поиску иглы в стоге сена. Я бы порекомендовал иметь о том, как RSS используется в java. Это знание будет полезно в течение нескольких лет!
Пожалуйста, дайте мне знать, когда вам нужны более конкретные ссылки или лучшее объяснение. И... удачи в твоем квете; -)