<!--
title: Protect network buffer lifecycle
domain: runtimes
topic: Networking
language: Java
source: netty/netty
updated: 2025-02-12
url: https://awesomereviewers.com/reviewers/netty-protect-network-buffer-lifecycle/
-->

When handling network buffers in protocol implementations, ensure proper lifecycle management to prevent memory leaks and data corruption. Key practices:

1. Convert mutable data to immutable form before async operations:
```java
// WRONG
ctx.fireUserEventTriggered(evt);
event.userEvent = String.valueOf(evt); // evt may be modified/released

// RIGHT
String eventStr = String.valueOf(evt);
ctx.fireUserEventTriggered(evt);
event.userEvent = eventStr;
```

2. Use buffer slicing and reference counting for partial data:
```java
// WRONG
byte[] partialData = new byte[5];
System.arraycopy(data, 0, partialData, 0, 5);

// RIGHT
ByteBuf chunk = ctx.alloc().buffer().writeBytes(data);
ByteBuf partial = chunk.retainedSlice(0, 5);
// ... use partial ...
partial.release();
chunk.release();
```

3. Clear buffer arrays after submission to prevent stale references:
```java
// After buffer submission
iovArray.clear(); // Clear references that are no longer needed
```

This guidance is especially important in asynchronous networking code where buffers may be accessed across different threads or event loop iterations.
