From b2bc403bd2780bdc744bf3c0e744d56e39fd74a9 Mon Sep 17 00:00:00 2001 From: ohadzeliger <70664918+ohadzeliger@users.noreply.github.com> Date: Mon, 12 Dec 2022 10:59:55 -0500 Subject: [PATCH] Resolve #1940: Refactor ThenKeyExpression#normalizeKeyForPositions for performance (#1941) --- docs/ReleaseNotes.md | 2 +- .../record/metadata/expressions/ThenKeyExpression.java | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/ReleaseNotes.md b/docs/ReleaseNotes.md index fdf9e56371..07dc280a23 100644 --- a/docs/ReleaseNotes.md +++ b/docs/ReleaseNotes.md @@ -15,7 +15,7 @@ The Guava dependency version has been updated to 31.1. Projects may need to chec // begin next release ### NEXT_RELEASE -* **Bug fix** Fix 1 [(Issue #NNN)](https://github.com/FoundationDB/fdb-record-layer/issues/NNN) +* **Bug fix** Refactor ThenKeyExpression#normalizeKeyForPositions to reduce hotspot detected by removing stream() implementation to reduce new object creation [(Issue #1940)](https://github.com/FoundationDB/fdb-record-layer/issues/1940) * **Bug fix** Fix 2 [(Issue #NNN)](https://github.com/FoundationDB/fdb-record-layer/issues/NNN) * **Bug fix** Fix 3 [(Issue #NNN)](https://github.com/FoundationDB/fdb-record-layer/issues/NNN) * **Bug fix** Fix 4 [(Issue #NNN)](https://github.com/FoundationDB/fdb-record-layer/issues/NNN) diff --git a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/expressions/ThenKeyExpression.java b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/expressions/ThenKeyExpression.java index 2f8b270411..f1a862136a 100644 --- a/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/expressions/ThenKeyExpression.java +++ b/fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/metadata/expressions/ThenKeyExpression.java @@ -194,9 +194,11 @@ public R expand(@Nonnull final KeyExpr @Nonnull @Override public List normalizeKeyForPositions() { - return getChildren() - .stream().flatMap(k -> k.normalizeKeyForPositions().stream()) - .collect(Collectors.toList()); + List list = new ArrayList<>(); + for (KeyExpression k : getChildren()) { + list.addAll(k.normalizeKeyForPositions()); + } + return list; } @Override