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

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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