Netty buffer緩沖區ByteBuf
byte 作為網絡傳輸的基本單位,因此數據在網絡中進行傳輸時需要將數據轉換成byte進行傳輸。netty提供了專門的緩沖區byte生成api ByteBuf。
Buffer API主要包括:
- ByteBuf
- ByteBufHolder
Netty 緩沖 API 提供了幾個優勢:
- 可以自定義緩沖類型
- 通過一個內置的復合緩沖類型實現零拷貝
- 擴展性好,比如 StringBuilder
- 不需要調用 flip() 來切換讀/寫模式
- 讀取和寫入索引分開
- 方法鏈
- 引用計數
- Pooling(池)
ByteBuf索引
- 讀索引
- 寫索引
ByteBuf使用模式
heap buffer(堆緩沖區)
- 數據存儲在 JVM 的堆空間
- GC 可以及時釋放內存空間
direct buffer(直接緩沖區)
- 沒有中間內存交換的二次拷貝,也就是通常說的“零”拷貝。
- 駐留在垃圾回收掃描的堆區以外,需要手工管理內存(分配和釋放等)。
- 在 -XX:MaxDirectMemorySize=xxM大小限制下, 使用 Heap 之外的內存, GC對此”無能為力”,也就意味着規避了在高負載下頻繁的GC過程對應用線程的中斷影響。
composite buffer(復合緩沖區)
- 可以創建多個不同的 ByteBuf,然后提供一個這些 ByteBuf 組合的視圖。
- 復合緩沖區就像一個列表,我們可以動態的添加和刪除其中的 ByteBuf,JDK 的 ByteBuffer 沒有這樣的功能。
