Медленность не является линейной, что заставляет меня подозревать, что записи хранятся вне кучи или на диске.
Вам необходимо настроить такое поведение. Никто не может дать подробный совет, не зная вашей конфигурации или программы.
Из предоставленной вами информации наиболее вероятная причина:
Увеличивая размер кеша, вашей программе требуется больше памяти кучи. Если используемая память кучи приближается к доступной памяти кучи, ваша программа замедляется из-за чрезмерной сборки мусора. Сборщику мусора требуется «передышка» для эффективной работы.
Мой общий подход к решению любых проблем с производительностью:
- Узнайте о максимальном размере кучи используемой Java реализации
- Используйте инструменты вашей ОС, чтобы увидеть, что в настоящее время происходит, и получить представление об использовании ресурсов вашей программой с точки зрения памяти, ЦП и операций ввода-вывода. На Linux это будет
vmstat
- Используйте такой инструмент, как visualvm, или включите журналы G C, чтобы увидеть активность сборщика мусора
- Имейте воспроизводимый тест, который вы можете использовать для оценки производительности
Чтобы найти идеальный размер кучи и записи, я предлагаю: Запустите тест с 5 КБ записей. Сколько памяти требует ваше приложение Java? Сколько памяти доступно в системе? Запустите тест с 10k записями. Ответьте на тот же вопрос. Затем вы можете линейно прогнозировать объем памяти с другими размерами кеша.