1

私は、Java 7 se組み込みアプリでNettyベータ2WebSocket機能を使用しており、フットプリントを可能な限り小さくしようとしています。-Xms8mと-Xmx32mで実行しています。

YourKitでアプリのプロファイルを作成すると、クライアントがサーバーとのWebSocketチャネルを確立するとすぐに、基本的なbyte[]タイプのサイズが2MBから16MBに跳ね上がります。

  • 注:これはハンドシェイクの後ですが、WebSocketメッセージが送信される前です

他の誰かがこれを見たことがありますか、そしてあなたはこの割り当てを何をしているのか知っていますか?

ありがとう

4

1 に答える 1

2

これは、デフォルトでNetty4で使用されるプールされたByteBufAllocatorが原因で発生すると思います。バイトの大きなチャンクを割り当ててプールに入れ、小さいサイズを要求する場合はその「スライス」のみを使用します。これは、ヒープなどのメモリレイアウトに役立ちます。

メモリ使用量を少なくしたい(そしてパフォーマンスをいくらか失いたい)場合は、プールされていないByteBufAllocatorを使用してください。

クライアントの場合:

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

サーバーの場合:

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