Netty には、メモリ コピーを最小限に抑え、メモリ使用量を最適化しようとする 2 つのシナリオがあります。
(1) 非常に大きなフレーム (20 メガバイト) の読み取り。
(2) 非常に小さなフレーム (フレームあたり 50 バイトで 20 メガバイト) を多数読み取り、パイプラインの上位レベルで 1 つのメッセージに再構築します。
最初のシナリオでは、フレームの先頭で長さを取得するため、FrameDecoder を拡張しました。残念ながら、Netty に長さを返す方法がわかりません (フレームが完全かどうかのみを示します)。Netty は複数のフィル バッファー、コピー、および再割り当てのサイクルを実行しているため、必要以上のメモリを使用していると思います。私がここに欠けているものはありますか?または、このシナリオが予想される場合、FrameDecoder を完全に回避する必要がありますか?
2 番目のシナリオでは、現在 ChannelBuffers.wrappedBuffer を使用してラップするすべての小さなフレームのリンク リストを作成していますが (これを ChannelBufferInputStream でラップできます)、予想よりもはるかに多くのメモリを使用しています (おそらく割り当てられた ChannelBuffers に予備のスペースがあるためですか?)。これは Netty ChannelBuffers を使用する正しい方法ですか?