YourKit显示当WebSocket客户端连接到WebSocket服务器时分配的16 MB字节[]

YourKit显示当WebSocket客户端连接到WebSocket服务器时分配的16 MB字节[],websocket,netty,Websocket,Netty,我在一个Java7SE嵌入式应用程序中使用Netty beta 2 websocket功能,我试图使占用的空间尽可能小。我用-Xms8m和-Xmx32m运行 当我在YourKit中评测应用程序时,只要客户端与服务器建立websocket通道,基本字节[]类型大小就会从2MB跳到16MB 注意:这是在握手之后,但在发送任何websocket消息之前 其他人看到了吗?你知道这是怎么回事吗 谢谢我认为这是因为Netty 4默认使用了我们的池式ByteBufAllocator。它将分配大块字节并将其

我在一个Java7SE嵌入式应用程序中使用Netty beta 2 websocket功能,我试图使占用的空间尽可能小。我用-Xms8m和-Xmx32m运行

当我在YourKit中评测应用程序时,只要客户端与服务器建立websocket通道,基本字节[]类型大小就会从2MB跳到16MB

  • 注意:这是在握手之后,但在发送任何websocket消息之前
其他人看到了吗?你知道这是怎么回事吗


谢谢

我认为这是因为Netty 4默认使用了我们的池式ByteBufAllocator。它将分配大块字节并将其放入池中,当请求较小的字节时,只使用其中的“片”。这有助于堆上的内存布局等

如果您想降低内存使用率(并降低一些性能),请使用未经冷却的ByteBufAllocator

客户:

bootstrap.option(ChannelOption.ALLOCATOR, UnpooledByteBufAllocator.DEFAULT);
对于服务器:

bootstrap.childOption(ChannelOption.ALLOCATOR, UnpooledByteBufAllocator.DEFAULT);

一般来说,我们希望使用所有的最大性能/吞吐量选项,但在这种情况下,内存占用肯定是一个考虑因素。谢谢你的提示,诺曼。