Альтернативные реализации селектора Java

Я пишу приложение с высокой производительностью/низким содержанием мусора (вопрос микросекунд), который имеет сетевой компонент. Одна из проблем, с которой я столкнулся, - это реализация встроенного селектора для Java NIO.

Несколько проблем, которые являются проблематичными:

  • Многое создание объекта. Практически каждый вызов selectedKeys() создает много объектов. Итераторы, бокс /unboxing, вы называете это. Не проблема в большинстве других случаев, но приложение, которое я пишу, должно создавать как можно меньше мусора.
  • Слои на слоях блокировки и синхронизации. В то время, когда были созданы selectorImpls, связки примитивов Java не существовали. В результате это неуклюже и не оптимально. В моем случае использования существует только один поток, вызывающий select, поэтому блокировка фактически бесполезна.

Расширение или изменение реализации селектора является нестандартным. Большинство классов являются окончательными, а частные и пакетно-частные члены расположены в пакете sun.nio.ch.*. Родные методы также усложняют ситуацию.

Есть ли еще более современные реализации селектора, которые могут быть более эффективными?

Сетевые библиотеки, которые я изучил, просто используют встроенный селектор Java под обложками. Любая помощь будет оценена.

Ответы

Ответ 2

Проект Netty имеет реализацию, которая использует Родной транспорт с конечным эффектом epoll:

Начиная с версии 4.0.16 Netty предоставляет собственный перенос сокетов для Linux с использованием JNI. Этот транспорт имеет более высокую производительность и производит меньше мусора [...]

Один из возможных недостатков для вас может быть, он доступен только для Linux.

С положительной стороны Netty - проект с открытым исходным кодом, может быть, исходный код даст вам подсказку или два.