Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tunes the initial size of various reusable ArrayLists to reduce required growth when processing real-world data. #1048

Open
wants to merge 1 commit into
base: ion-11-encoding-optimize-initial-expression-array-size-session-pools-merge-presencebitmap-pool-no-lambdas-no-arraylistitr
Choose a base branch
from

Conversation

tgregg
Copy link
Contributor

@tgregg tgregg commented Feb 4, 2025

Description of changes:
Growing each of these arrays was the number 4 contributor to allocation rate in profiles of real-world data. We can continue to tune these values as we profile a larger corpus of data, but these are the best ones we have right now.

Speed: 216 ms/op -> 215 ms/op (~0%)
Allocation rate: 110 KB/op -> 107 KB/op (-2.7%)

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Copy link
Contributor

@jobarr-amzn jobarr-amzn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be helpful to add comments which lead to how this was tuned/chosen. Perhaps that's redundant, please feel free to take or leave at your discretion. I just note that the commit says "tune" but doesn't describe how these numbers were selected. The PR description/thread can at least be added to later so that indirection is useful.

@@ -1221,7 +1221,7 @@ private class EncodingDirectiveReader {

boolean isSymbolTableAppend = false;
boolean isMacroTableAppend = false;
List<String> newSymbols = new ArrayList<>(8);
List<String> newSymbols = new ArrayList<>(128);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
List<String> newSymbols = new ArrayList<>(128);
List<String> newSymbols = new ArrayList<>(128); // ion-java #1048

@@ -25,7 +25,7 @@ public abstract class EExpressionArgsReader {
private final ReaderAdapter reader;

// Reusable sink for expressions.
protected final List<Expression.EExpressionBodyExpression> expressions = new ArrayList<>(16);
protected final List<Expression.EExpressionBodyExpression> expressions = new ArrayList<>(128);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
protected final List<Expression.EExpressionBodyExpression> expressions = new ArrayList<>(128);
protected final List<Expression.EExpressionBodyExpression> expressions = new ArrayList<>(128); // ion-java #1048

Comment on lines +24 to +25
private val signature: MutableList<Macro.Parameter> = ArrayList(16)
private val expressions: MutableList<TemplateBodyExpression> = ArrayList(64)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
private val signature: MutableList<Macro.Parameter> = ArrayList(16)
private val expressions: MutableList<TemplateBodyExpression> = ArrayList(64)
private val signature: MutableList<Macro.Parameter> = ArrayList(16) // ion-java #1048
private val expressions: MutableList<TemplateBodyExpression> = ArrayList(64) // ion-java #1048

@@ -55,7 +55,7 @@ class MacroEvaluator {
/** Pool of [Expression] to minimize allocation and garbage collection. */
val expressionPool: PooledExpressionFactory = PooledExpressionFactory()
/** Pool of [ExpansionInfo] to minimize allocation and garbage collection. */
private val expanderPool: ArrayList<ExpansionInfo> = ArrayList(32)
private val expanderPool: ArrayList<ExpansionInfo> = ArrayList(64)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
private val expanderPool: ArrayList<ExpansionInfo> = ArrayList(64)
private val expanderPool: ArrayList<ExpansionInfo> = ArrayList(64) // ion-java #1048

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants