Я кодировал шахматный движок в Java, который играет прилично и конкурирует с двигателями 2050 CCLR. Я использую таблицу транспонирования для хранения информации о различных позициях.
Я обычно сопоставляю ключ (long) с объектом, который содержит около 8 дюймов. Мне удалось уменьшить это значение до 2, но это не решило проблему, поэтому я вернулся к 8, для простоты.
Важно объяснить, как используется хэш-карта:
В основном, когда я ищу «лучший ход» для позиции, я очищаю хэш-карту для начала, и она ищет, а тем временем заполняет карту. Во время поиска элементы не удаляются (возможно, переопределяются). После того, как был найден лучший ход, карта очищается.
Если я запускаю одиночный поиск (без очистки карты, использование памяти выглядит следующим образом):
Мне было интересно, откуда эти шипы. Это связано с реализацией HashMap? Что здесь происходит? Я использовал VisualVM, чтобы выяснить, что многие int [] создаются и удаляются.
Обычно при тестировании мне нужно запускать несколько механизмов одновременно (около 20). Происходит следующее: я запускаю около 10 игр одновременно. Вначале движку требуется больше времени на обдумывание, и поэтому для хэш-карты используется больше кучи. Но по ходу игры двигатели движутся быстрее. Но, к сожалению, даже если хэш-карта очищена, размер кучи не уменьшается go.
Я искал какое-то решение для ограничения размера хэш-карты, но не нашел подходящего решения.
Может ли кто-нибудь помочь мне здесь?