Java Hashmap выделяет и удаляет массивы - PullRequest
0 голосов
/ 29 апреля 2020

Я кодировал шахматный движок в Java, который играет прилично и конкурирует с двигателями 2050 CCLR. Я использую таблицу транспонирования для хранения информации о различных позициях.

Я обычно сопоставляю ключ (long) с объектом, который содержит около 8 дюймов. Мне удалось уменьшить это значение до 2, но это не решило проблему, поэтому я вернулся к 8, для простоты.

Важно объяснить, как используется хэш-карта:

В основном, когда я ищу «лучший ход» для позиции, я очищаю хэш-карту для начала, и она ищет, а тем временем заполняет карту. Во время поиска элементы не удаляются (возможно, переопределяются). После того, как был найден лучший ход, карта очищается.


Если я запускаю одиночный поиск (без очистки карты, использование памяти выглядит следующим образом):

enter image description here

Мне было интересно, откуда эти шипы. Это связано с реализацией HashMap? Что здесь происходит? Я использовал VisualVM, чтобы выяснить, что многие int [] создаются и удаляются.


Обычно при тестировании мне нужно запускать несколько механизмов одновременно (около 20). Происходит следующее: я запускаю около 10 игр одновременно. Вначале движку требуется больше времени на обдумывание, и поэтому для хэш-карты используется больше кучи. Но по ходу игры двигатели движутся быстрее. Но, к сожалению, даже если хэш-карта очищена, размер кучи не уменьшается go.

Я искал какое-то решение для ограничения размера хэш-карты, но не нашел подходящего решения.

Может ли кто-нибудь помочь мне здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...