1

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

当我在 YourKit 中分析应用程序时,一旦客户端与服务器建立 websocket 通道,基本的 byte[] 类型大小就会从 2 MB 跳到 16 MB。

  • 注意:这是在握手之后,但在发送任何 websocket 消息之前

有没有其他人看到过这个,你知道这个分配是做什么的吗?

谢谢

4

1 回答 1

2

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

如果您想使用低内存(并降低一些性能),请使用未池化的 ByteBufAllocator。

对于客户:

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

对于服务器:

bootstrap.childOption(ChannelOption.ALLOCATOR, UnpooledByteBufAllocator.DEFAULT);
于 2013-03-15T05:44:59.850 回答