Skip to content

Commit

Permalink
Presize HashMap allocations - backport from master (#2179)
Browse files Browse the repository at this point in the history
* Issue #1957:: Presize HashMap allocations

Signed-off-by: Patrick Schmitt <[email protected]>
  • Loading branch information
Zuplyx authored Jun 25, 2024
1 parent bc4e51b commit de0bdcd
Showing 1 changed file with 10 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.util.stream.Collectors;

import org.eclipse.persistence.annotations.CacheKeyType;
import org.eclipse.persistence.config.ReferenceMode;
Expand Down Expand Up @@ -711,8 +712,9 @@ public UnitOfWorkChangeSet calculateChanges(Map registeredObjects, UnitOfWorkCha

// Second calculate changes for all registered objects.
Iterator objects = allObjects.keySet().iterator();
Map changedObjects = new IdentityHashMap();
Map visitedNodes = new IdentityHashMap();
int allObjectsSize = allObjects.size();
Map changedObjects = new IdentityHashMap(allObjectsSize);
Map visitedNodes = new IdentityHashMap(allObjectsSize);
while (objects.hasNext()) {
Object object = objects.next();

Expand Down Expand Up @@ -788,7 +790,7 @@ public UnitOfWorkChangeSet calculateChanges(Map registeredObjects, UnitOfWorkCha

if (this.shouldDiscoverNewObjects && !changedObjects.isEmpty()) {
// Third discover any new objects from the new or changed objects.
Map newObjects = new IdentityHashMap();
Map newObjects = new IdentityHashMap(changedObjects.size());
// Bug 294259 - Do not replace the existingObjects list
// Iterate over the changed objects only.
discoverUnregisteredNewObjects(changedObjects, newObjects, getUnregisteredExistingObjects(), visitedNodes);
Expand All @@ -809,8 +811,9 @@ public UnitOfWorkChangeSet calculateChanges(Map registeredObjects, UnitOfWorkCha
// Remove any orphaned privately owned objects from the UnitOfWork and ChangeSets,
// these are the objects remaining in the UnitOfWork privateOwnedObjects map
if (hasPrivateOwnedObjects()) {
Map visitedObjects = new IdentityHashMap();
for (Set privateOwnedObjects : getPrivateOwnedObjects().values()) {
Collection<Set> values = getPrivateOwnedObjects().values();
Map visitedObjects = new IdentityHashMap(values.stream().collect(Collectors.summingInt(Set::size)));
for (Set privateOwnedObjects : values) {
for (Object objectToRemove : privateOwnedObjects) {
performRemovePrivateOwnedObjectFromChangeSet(objectToRemove, visitedObjects);
}
Expand Down Expand Up @@ -5029,7 +5032,8 @@ protected void setNewObjectsCloneToOriginal(Map newObjects) {
protected void setupPrimaryKeyToNewObjects() {
primaryKeyToNewObjects = null;
if (hasNewObjects()) {
primaryKeyToNewObjects = new HashMap<>();
Map newObjects = getNewObjectsCloneToOriginal();
primaryKeyToNewObjects = new HashMap<>(newObjects.size());
getNewObjectsCloneToOriginal().forEach((object, o2) -> {
addNewObjectToPrimaryKeyToNewObjects(object);
});
Expand Down

0 comments on commit de0bdcd

Please sign in to comment.