Профилированное Java-приложение - Почему поиск карт происходит медленно?

После профилирования Java-приложения с помощью JProfiler и YourKit я увидел, что несколько методов для доступа к Long to Object Map, мы использовали карту fast util для обеспечения высокой пропускной способности, и массивы работают медленно. Приложение работает в среде тиков, игровой цикл, если вы сделаете паузу в 50 мс между каждым тиком в потоке. Каждый тик, местоположения объектов извлекаются из карты с их местоположением чанка, однако захват этих данных каким-то образом создает скачки с задержкой 200 мс +. Есть ли способы оптимизировать поиск по карте / захват объекта в реальном времени? Я попытался сохранить чанк локально в объекте сущности, чтобы избежать доступа к карте, но это создает намного больше памяти (у нас отмечены 8k + сущности) и может быть утечка.

В настоящее время у нас есть реализация серверного игрового цикла с многопользовательскими клиентами. Пакеты обрабатываются вместе с игровой механикой (столкновение, тиканье сущности) в одном потоке. Мы попытались приблизиться к многопоточному окружению, но это создало множество условий гонки, требующих блокировок и методов синхронизации, которые в целом замедлили тиковую петлю и потребляли много ресурсов ЦП от ядер. Однопоточная хорошо работает; однако большая часть отставания связана с поиском на карте, поиском в массиве, созданием объектов для столкновений и перемещения объектов и т. д. Знаете ли вы какие-либо хорошие идеи по оптимизации этих циклов?

0 ответов

Другие вопросы по тегам