我正在编写一个高性能/低垃圾应用程序 (微秒很重要)具有网络组件。我遇到的痛点之一是 Java NIO 的内置选择器的实现。
一些有问题的事情:
- 大量对象创建。几乎每次调用 selectedKeys() 都会创建很多对象。迭代器、装箱/拆箱,应有尽有。大多数其他情况都不是问题,但我正在编写的应用程序需要尽可能少地产生垃圾。
- 层层锁定和同步。在构建 selectorImpls 时,一堆 Java 锁原语并不存在。结果,它很笨重而且不是最佳的。在我的用例中,只有一个线程调用
select
,所以锁定实际上是无用的。
扩展或更改选择器实现是行不通的。大多数类都是最终类,私有(private)成员和包私有(private)成员位于 sun.nio.ch.*
包中。 native 方法也使事情复杂化。
是否有任何其他可能性能更高的更现代的选择器实现?
我检查过的网络库只是在幕后使用内置的 Java 选择器。任何帮助将不胜感激。
最佳答案
也许这个库能满足您的需求?我自己没用过,但看起来很有前途。 http://www.coralblocks.com/index.php/the-simplicity-of-coralreactor/
关于java - 替代 Java 选择器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43807568/