SizeClassedChunk Class — netty Architecture
Architecture documentation for the SizeClassedChunk class in AdaptivePoolingAllocator.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 0786b48a_6931_326c_822b_73a96aca1827["SizeClassedChunk"] fee3fa6d_a7fb_30d6_ea34_49602c633a2c["AdaptivePoolingAllocator.java"] 0786b48a_6931_326c_822b_73a96aca1827 -->|defined in| fee3fa6d_a7fb_30d6_ea34_49602c633a2c 28c32680_05cd_e170_2197_6979d27d5251["SizeClassedChunk()"] 0786b48a_6931_326c_822b_73a96aca1827 -->|method| 28c32680_05cd_e170_2197_6979d27d5251 124af09c_056b_fca2_ab69_30a58e494d89["readInitInto()"] 0786b48a_6931_326c_822b_73a96aca1827 -->|method| 124af09c_056b_fca2_ab69_30a58e494d89 1c99e4d1_eab5_0574_2be2_1d396456cf4d["nextAvailableSegmentOffset()"] 0786b48a_6931_326c_822b_73a96aca1827 -->|method| 1c99e4d1_eab5_0574_2be2_1d396456cf4d 0e3b39fd_2e5c_a191_86b4_5e63a6cbaad0["remainingCapacityOnFreeList()"] 0786b48a_6931_326c_822b_73a96aca1827 -->|method| 0e3b39fd_2e5c_a191_86b4_5e63a6cbaad0 18f06c86_ea15_9251_9dc0_a0d73e197877["remainingCapacity()"] 0786b48a_6931_326c_822b_73a96aca1827 -->|method| 18f06c86_ea15_9251_9dc0_a0d73e197877 53eff05b_d707_ed78_a7da_998e3c983cab["releaseSegmentOffsetIntoFreeList()"] 0786b48a_6931_326c_822b_73a96aca1827 -->|method| 53eff05b_d707_ed78_a7da_998e3c983cab f1f91104_8721_329c_3138_235bb4f03863["releaseSegment()"] 0786b48a_6931_326c_822b_73a96aca1827 -->|method| f1f91104_8721_329c_3138_235bb4f03863
Relationship Graph
Source Code
buffer/src/main/java/io/netty/buffer/AdaptivePoolingAllocator.java lines 1252–1354
private static final class SizeClassedChunk extends Chunk {
private static final int FREE_LIST_EMPTY = -1;
private final int segmentSize;
private final MpscIntQueue externalFreeList;
private final IntStack localFreeList;
private Thread ownerThread;
SizeClassedChunk(AbstractByteBuf delegate, Magazine magazine,
SizeClassChunkController controller) {
super(delegate, magazine, true);
segmentSize = controller.segmentSize;
ownerThread = magazine.group.ownerThread;
if (ownerThread == null) {
externalFreeList = controller.createFreeList();
localFreeList = null;
} else {
externalFreeList = controller.createEmptyFreeList();
localFreeList = controller.createLocalFreeList();
}
}
@Override
public boolean readInitInto(AdaptiveByteBuf buf, int size, int startingCapacity, int maxCapacity) {
final int startIndex = nextAvailableSegmentOffset();
if (startIndex == FREE_LIST_EMPTY) {
return false;
}
allocatedBytes += segmentSize;
Chunk chunk = this;
chunk.retain();
try {
buf.init(delegate, chunk, 0, 0, startIndex, size, startingCapacity, maxCapacity);
chunk = null;
} finally {
if (chunk != null) {
// If chunk is not null we know that buf.init(...) failed and so we need to manually release
// the chunk again as we retained it before calling buf.init(...). Beside this we also need to
// restore the old allocatedBytes value.
allocatedBytes -= segmentSize;
chunk.releaseSegment(startIndex, startingCapacity);
}
}
return true;
}
private int nextAvailableSegmentOffset() {
final int startIndex;
IntStack localFreeList = this.localFreeList;
if (localFreeList != null) {
assert Thread.currentThread() == ownerThread;
if (localFreeList.isEmpty()) {
startIndex = externalFreeList.poll();
} else {
startIndex = localFreeList.pop();
}
} else {
startIndex = externalFreeList.poll();
}
return startIndex;
}
private int remainingCapacityOnFreeList() {
final int segmentSize = this.segmentSize;
int remainingCapacity = externalFreeList.size() * segmentSize;
IntStack localFreeList = this.localFreeList;
if (localFreeList != null) {
assert Thread.currentThread() == ownerThread;
remainingCapacity += localFreeList.size() * segmentSize;
}
return remainingCapacity;
}
@Override
public int remainingCapacity() {
int remainingCapacity = super.remainingCapacity();
if (remainingCapacity > segmentSize) {
return remainingCapacity;
}
int updatedRemainingCapacity = remainingCapacityOnFreeList();
if (updatedRemainingCapacity == remainingCapacity) {
return remainingCapacity;
Source
Frequently Asked Questions
What is the SizeClassedChunk class?
SizeClassedChunk is a class in the netty codebase, defined in buffer/src/main/java/io/netty/buffer/AdaptivePoolingAllocator.java.
Where is SizeClassedChunk defined?
SizeClassedChunk is defined in buffer/src/main/java/io/netty/buffer/AdaptivePoolingAllocator.java at line 1252.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free