DO NOT MERGE - Measure performance of pre-order implementations #2467
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.
This is on top of #2464 and should not be merged. It adds a JMH Benchmark that compares the performance of current pre-order implementations in
TreeLike
.To run the benchmark, go to
PreOrderPerformance
and runmain
function. The benchmark generates a randomTreeLike
tree comprising 100 nodes with maximum of 20 nodes in a level, it then compares the two implementations of pre-order traversal:TreeLike<>#inPreOrder()
Iterable#iterator()
interface thatTreeLike<>
now extends from.The benchmark creates 1 million pre-ordered lists once using the old implementation and another time using the new implementation, and compares, among other things the memory consumption.
Excerpt from the test results:
I think the important bit here is
gc.alloc.rate
which shows the rate in which the garbage collector is invoked. In the old implementation 1422,556 MB/sec compared to 20,819 MB/sec, meaning that the new implementation is reducing the allocation rate by ~98,5%.