1
4
为此,我使用了一个名为Java Chronicle的库。它被设计为每秒持久化和排队一百万次报价,而不会产生任何重大垃圾。 我有一个演示 here 它以每秒一百万条消息的速度发送具有纳秒定时信息的类似报价的对象,并且它可以在具有32MB堆的JVM中发送数千万条消息,甚至不触发一个小的收集。往返延迟小于0.6微秒,在我的ultra book上90%的时间都是这样。)
我强烈建议不要用垃圾填充CPU缓存。事实上,我避免任何会产生任何重要垃圾的构造。您可以构建一个系统,使每个事件创建的对象少于一个 端到端 。我有一个伊甸园大小,比我一天产生的垃圾量还大,所以不用担心轻微或严重的GC。
五年前,我用Java编写了一个有利可图的低延迟交易系统。当时,用Java交易的速度已经快到60微秒,但现在你可以做得更好。 如果你想要低延迟的市场数据处理系统,我就是这样做的。你可能会发现我在JavaOne上做的这个演示也很有趣。 http://www.slideshare.net/PeterLawrey/writing-and-testing-high-frequency-trading-engines-in-java 编辑我已经添加了这个 parsing example
当设置为-verbose:gc-Xmx32m时,它将打印
注意:没有触发GC。 |
2
3
我会用
|
3
1
不一定,但是你必须把
如果这确实是一个问题,那么另一种方法是
所以你不需要创建你的1000
|
4
1
是的,当然,有点像 this ,因为操作系统和JVM不关心线程上发生了什么,所以通常这是重用可回收对象的好做法。 |
5
0
我看到你的问题中有两个问题。一个是线程池,另一个是对象池。对于线程池问题,Java提供了 ExecutorService 。以下是使用ExecutorService的示例。
ExecutorService为许多不同类型的线程池提供了不同的行为。 就对象池化而言,(每秒创建1000个对象,然后将它们留给垃圾收集有意义吗?这一切都取决于对象的状态和开销。如果你担心工作线程的状态会受到影响,你可以考虑使用轻量级模式将你的状态封装在工作线程之外。此外,如果你要遵循 flyweight pattern ,你也可以看看有多有用 Future 和 Callable 对象将在您的应用程序体系结构中。 |