Improve memory footprint when evaluating in loops #2171
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.
We are cloning/copying too many objects when evaluating loops. i.e. a simple
map-get
call will always clone the full map that is passed, which can lead to an absurd amount of allocated memory. But we cannot really cache the results as 1) variables can be re-assigned and 2) some code paths (i.e. equality checks) evaluate binary expressions different than normaly. This fix will only cache "delayed" results, which should cover 90% of the cases. This should also improve performance in certain cases by a lot.