Недостаточно кучи памяти (увеличьте ее с помощью -Xmx, например, -Xmx512m
). Когда свободной памяти становится очень мало, сборщик мусора тратит много-много времени, который яростно сканирует кучу на предмет недоступных объектов.
Ваш hashCode () в порядке, дополнительные очки за использование всех битов длиной cycleId
.
Редактировать . Теперь я видел, как ты увеличил память и не помог. Прежде всего, вы уверены, что удалось увеличить объем памяти? Вы можете проверить это с помощью jconsole, подключиться к вашему приложению и увидеть его размер кучи.
Для проверки альтернативного объяснения, есть ли в вашем cycleId
какой-либо конкретный шаблон, который может сделать эту реализацию hashCode () плохой? Мол, его 32 старших разряда в основном похожи на 32 младших разряда. (Да, верно).
Но нет. Даже если бы это было так, вы бы увидели постепенное снижение производительности, а не резкое падение в определенной точке (и вы получите операцию OutOfMemoryError и frenzy gc). Так что моя лучшая догадка - проблема с памятью. Вы либо не увеличили размер кучи, как вы думали , либо какой-то другой код захватывает память в какой-то момент. (Вы можете использовать такой инструмент, как VisualVM, чтобы профилировать это, получить дамп кучи на OOME и посмотреть, какие объекты он содержит).
Edit2 Я выделил жирным шрифтом правильную часть вышеупомянутого.