Skip to content

Решение на Java+C для HighLoad Cup 2017 (9 место первого раунда)

Notifications You must be signed in to change notification settings

chemist777/highloadcup2017

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e34a5ff · Aug 31, 2017

History

1 Commit
Aug 31, 2017
Aug 31, 2017
Aug 31, 2017
Aug 31, 2017
Aug 31, 2017
Aug 31, 2017
Aug 31, 2017
Aug 31, 2017
Aug 31, 2017

Repository files navigation

HighLoad Cup 2017

Решение, занявшее в первом раунде чемпионата 9 место.

Место в финале пока неизвестно.

Написано на Java 8 с использованием модуля на C через JNI для работы с epoll.

Основные идеи

  • Использование C для осуществления сетевых операций напрямую через syscall в ядро linux;
  • Минимизация аллокаций новых объектов;
  • Преаллокация буфферов heap и native памяти в пулах;
  • Минимизация копирования памяти между native и heap;
  • Кэширование ответов на все типы GET-запросов (в том числе с фильтрами по /avg, /visits);
  • Очистка только тех кэшей, которые аффектит изменение аттрибутов данного объекта;
  • Отказ от использования String в пользу байтовых массивов;
  • Отказ от использования Map в пользу Array;
  • Реимплементация стандатных функций Java под конкретную задачу;
  • Собственный HTTP-парзер;
  • Подготовка готовых ответов для стандартных ситуаций (404, 400, 200 empty);
  • Минимизация переключений контекстов, минимизация общих данных между потоками;
  • Оптимизация генерации и парсинга Json.

Внимание!

Код решения написан под конкретную задачу конкурса и крайне не рекомендуется к использованию где-то ещё без значительной доработки. В реальной разработке не стоит использовать такое количество велосипедов и оптимизаций.

About

Решение на Java+C для HighLoad Cup 2017 (9 место первого раунда)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published