备用Java选择器实现

时间:2017-05-05 14:30:16

标签: java java-native-interface nio

我正在编写一个高性能/低垃圾应用程序 (微秒很重要)具有网络组件。我遇到的一个痛点是内置的Selector Selector for Java NIO的实现。

一些有问题的事情:

  • 很多对象创建。几乎每次调用selectedKeys()都会创建很多对象。迭代器,装箱/拆箱,你的名字。大多数其他情况不是问题,但我正在编写的应用程序需要创建尽可能少的垃圾。
  • 分层锁定和同步。在构建selectorImpls时,一堆Java锁原语不存在。结果它很笨重而且不是最佳的。在我的用例中,只有一个线程调用select,因此锁定实际上是无用的。

扩展或更改选择器实现是不可能的。大多数类都是最终的,私有和包私有成员位于sun.nio.ch.*包中。原生方法也使事情变得复杂。

选择器还有其他更现代的实现可能更高效吗?

我检查过的网络库只是使用了内置的Java选择器。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

也许这个lib满足了你的需求?没有自己使用它,但看起来很有希望。 http://www.coralblocks.com/index.php/the-simplicity-of-coralreactor/

答案 1 :(得分:2)

Netty项目有一个使用Native epoll edge-triggered transport的实现:

  

从4.0.16开始,Netty使用JNI为Linux提供本机套接字传输。这种运输具有更高的性能并且产生更少的垃圾[...]

您可能遇到的一个可能的缺点是,它只能在Linux上使用。

从积极的方面来说,Netty是一个开源项目,可能是源代码会给你一两个提示。