Optimize AbstractListenableFuture Memory Allocations #28
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem: If an empty ArrayList has addAll() invoked with a Collection
argument that has a size less than 10, the underlying elementData
Object[] is still grown to 10 via an Array copy. In the case of
AbstractListenableFuture, the number of listeners is often 0 or 1,
and AbstractListenableFuture is in the critical path, meaning this
behavior causes unnecessary GC pressure for high throughput
applications.
Therefore, this commit enhances the logic to avoid the construction
of the listener copy ArrayList and its iterator if possible, and if
not, to use the more efficient constructor vs. addAll().