我在 java 7 se 嵌入式应用程序中使用 Netty beta 2 websocket 功能,我试图使占用空间尽可能小。我正在使用 -Xms8m 和 -Xmx32m 运行。
当我在 YourKit 中分析应用程序时,一旦客户端与服务器建立 websocket 通道,基本的 byte[] 类型大小就会从 2 MB 跳到 16 MB。
- 注意:这是在握手之后,但在发送任何 websocket 消息之前
有没有其他人看到过这个,你知道这个分配是做什么的吗?
谢谢
我认为这是因为我们在 Netty 4 中默认使用的池化 ByteBufAllocator。它将分配大块字节并将其放入池中,并在请求较小尺寸时仅使用它的“切片”。这有助于堆上的内存布局等。
如果您想使用低内存(并降低一些性能),请使用未池化的 ByteBufAllocator。
对于客户:
bootstrap.option(ChannelOption.ALLOCATOR, UnpooledByteBufAllocator.DEFAULT);
对于服务器:
bootstrap.childOption(ChannelOption.ALLOCATOR, UnpooledByteBufAllocator.DEFAULT);