Cache ImmutableKeyValuePairs#hashCode #5307
Merged
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.
The metrics hot path involves finding the relevant
AggregationHandle
in aConcurrentHashmap
for a given measurement based on itsAttributes
. We recommend that callers save references to commonAttributes
to prevent extra allocations on each measurement. In this case, callers can benefit from cachingAttributes#hashCode
so that it doesn't need to be recomputed each time we record a measurement and do a lookup in theConcurrentHashmap
.I've added benchmarks to
AttributesBenchmark
, which shows a ~15x improvement in time to computehashCode
(not surprising). But its more interesting to see the performance improvement in an actual metrics scenario. I've extendedMetricsBenchmark
to include a case where there's enough cardinality to make the map lookup not completely trivial (the other benchmarks only have a single attributes entry). The performance gains are modest since there's a lot more going on when performing a measurement besides computing a hashcode, but non-zero. Check out the before and after for more details.