#java-8 #heap-dump #overhead
Вопрос:
Привет, коллеги-разработчики,
Недавно я начал работать над повышением производительности своего приложения и хочу понять несколько вещей.
Сценарий: Ресурсы, которые у меня есть для виртуальной машины, составляют 22 ГБ, а приложение работало на 10 ГБ оперативной памяти. Это привело к. увеличенные задержки со скоростью 300 тыс. QPS. Заметил, что это может быть связано со старым триггером GC. Объем оперативной памяти увеличился с 4 Г до ~4,7-5,0 Г. Увеличили выделение до 16 и 21 и заметили, что это приводит только к быстрому увеличению генерации кучи, а объем кучи увеличился с 4 ГБ до 10,5 Г до запуска GC. (предполагая, что это должно быть связано с увеличением выделения кучи).
Взяли кучу мусора и хотите это проанализировать.
Анализ Отвала Кучи 1
Итак, вот поле «Плохие коллекции» в анализе, и здесь говорится, что LinkedHashSet не инициализируется должным образом,
- Размер подразумевает фактическое количество записей в наборе/Карте. На что указывает емкость?
- И первая строка указывает, что набор содержит строковые объекты. Хотя следующие из них относятся к той же категории, в них не упоминаются строки. Означает ли это, что я должен рассматривать их по-другому? Если да, то что означают здесь размер и вместимость?
Комментарии:
1. вместимость-это количество предварительно выделенных доступных слотов. Перераспределение внутренней структуры каждый раз при добавлении нового элемента было бы слишком дорогостоящим, поэтому во многих коллекциях используется предварительное распределение.