如何减少净垃圾产量?

Ego*_*kin 6 java garbage-collection netty

我有网络应用程序处理大约40k msg /秒使用netty框架编写,我想减少垃圾收集器调用的数量.在分析时我发现有大量的byte[]实例,我怀疑它来自这部分代码:

public class MessageHandler extends SimpleChannelHandler {

public void messageReceived(ChannelHandlerContext ctx, final MessageEvent e) {

    ChannelBuffer message = (ChannelBuffer) e.getMessage();
}

}
Run Code Online (Sandbox Code Playgroud)

是否有可能强制netty以ChannelBuffers某种方式重用/池以防止它每次构建它们?

Nor*_*rer 5

我们计划实现缓冲池的集合,但还没有完成.

请参阅https://github.com/netty/netty/issues/62

  • 在一般情况下,对象池在Java中不能很好地工作.单独的锁定开销使得正确的挑战变得困难,并且合并的对象变成类似于僵尸的东西 - 它们搞砸了年轻/旧的对象关系.JVM人员的一般建议是:请不要这样做.也就是说,这个特定的对象似乎没有除了一个基元数组之外的任何子代,所以它可能有效.但我不知道它实际上会有多大帮助. (5认同)