Eliminate lambda indirection overhead in DynamoDB Enhanced Client #6591
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.




Motivation and Context
The DynamoDB Enhanced Client v2 shows significant performance regression compared to v1 DynamoDB Mapper, with 32-98% slower operations across all operations. One theory was that lambda allocation overhead in
ResolvedImmutableAttribute.attributeGetterMethod()is a key bottleneck affecting all operations in the serialization hot path.The change refactors how attribute values are extracted during serialization by replacing an inline lambda expression with a method reference to a dedicated instance method. Profiling shows this reduces allocations of iterator and builder objects, with
LinkedHashMap$LinkedEntryIteratorallocations dropping 44% andDefaultDynamoDbExtensionContext$Builderallocations dropping 30%. The method reference approach appears to allow the JVM to optimize the call path more effectively, though the exact mechanism linking the code change to these specific allocation reductions is not fully clear from profiling data.The optimization shows the strongest impact on small objects, with Get TINY operations improving 47% compared to 7% for Get HUGE, suggesting the allocation overhead represents a larger proportion of total processing time for smaller payloads.
Change
Before:
After:
Results
running existing benchmarks for
test/sdk-benchmarks/src/main/java/software/amazon/awssdk/benchmark/enhanced/dynamodbJFR Profiling (Get TINY benchmark):
Allocation Impact:
CPU Impact: