Я пишу приложение с высокой производительностью/низким содержанием мусора (вопрос микросекунд), который имеет сетевой компонент. Одна из проблем, с которой я столкнулся, - это реализация встроенного селектора для Java NIO.
Несколько проблем, которые являются проблематичными:
- Многое создание объекта. Практически каждый вызов selectedKeys() создает много объектов. Итераторы, бокс /unboxing, вы называете это. Не проблема в большинстве других случаев, но приложение, которое я пишу, должно создавать как можно меньше мусора.
- Слои на слоях блокировки и синхронизации. В то время, когда были созданы selectorImpls, связки примитивов Java не существовали. В результате это неуклюже и не оптимально. В моем случае использования существует только один поток, вызывающий
select
, поэтому блокировка фактически бесполезна.
Расширение или изменение реализации селектора является нестандартным. Большинство классов являются окончательными, а частные и пакетно-частные члены расположены в пакете sun.nio.ch.*
. Родные методы также усложняют ситуацию.
Есть ли еще более современные реализации селектора, которые могут быть более эффективными?
Сетевые библиотеки, которые я изучил, просто используют встроенный селектор Java под обложками. Любая помощь будет оценена.