-
Notifications
You must be signed in to change notification settings - Fork 11.9k
Closed
Labels
Milestone
Description
Avoid unnecessary object allocation when getMessage.
GetMessageResult will create double ArrayList with 100 initialCapacity.
the pullBatchSize in consumer is 32 which means in default config. the 100 initialCapacity is unnecessary.
And when message is not found. the allocation is also can be avoided.
see
rocketmq/store/src/main/java/org/apache/rocketmq/store/GetMessageResult.java
Lines 24 to 35 in 538b6b7
public class GetMessageResult { | |
private final List<SelectMappedBufferResult> messageMapedList = | |
new ArrayList<SelectMappedBufferResult>(100); | |
private final List<ByteBuffer> messageBufferList = new ArrayList<ByteBuffer>(100); | |
private GetMessageStatus status; | |
private long nextBeginOffset; | |
private long minOffset; | |
private long maxOffset; | |
rocketmq/store/src/main/java/org/apache/rocketmq/store/DefaultMessageStore.java
Lines 539 to 565 in 538b6b7
GetMessageResult getResult = new GetMessageResult(); | |
final long maxOffsetPy = this.commitLog.getMaxOffset(); | |
ConsumeQueue consumeQueue = findConsumeQueue(topic, queueId); | |
if (consumeQueue != null) { | |
minOffset = consumeQueue.getMinOffsetInQueue(); | |
maxOffset = consumeQueue.getMaxOffsetInQueue(); | |
if (maxOffset == 0) { | |
status = GetMessageStatus.NO_MESSAGE_IN_QUEUE; | |
nextBeginOffset = nextOffsetCorrection(offset, 0); | |
} else if (offset < minOffset) { | |
status = GetMessageStatus.OFFSET_TOO_SMALL; | |
nextBeginOffset = nextOffsetCorrection(offset, minOffset); | |
} else if (offset == maxOffset) { | |
status = GetMessageStatus.OFFSET_OVERFLOW_ONE; | |
nextBeginOffset = nextOffsetCorrection(offset, offset); | |
} else if (offset > maxOffset) { | |
status = GetMessageStatus.OFFSET_OVERFLOW_BADLY; | |
if (0 == minOffset) { | |
nextBeginOffset = nextOffsetCorrection(offset, minOffset); | |
} else { | |
nextBeginOffset = nextOffsetCorrection(offset, maxOffset); | |
} | |
} else { | |
SelectMappedBufferResult bufferConsumeQueue = consumeQueue.getIndexBuffer(offset); |