This is an automated email from the ASF dual-hosted git repository. bchapuis pushed a commit to branch 681-handle-the-out-of-memory-errors in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit dca3ce4ff5687cb24a8eda8022d8d88bef8a5d6c Author: Bertil Chapuis <[email protected]> AuthorDate: Fri Jul 14 23:23:36 2023 +0200 Improve formatting and fix minor issues --- .../collection/Long2LongOpenHashDataMap.java | 25 ++++---- .../collection/Long2LongPackedOpenHashDataMap.java | 72 ++++++++++++++-------- .../collection/Long2ObjectOpenHashDataMap.java | 27 ++++---- 3 files changed, 69 insertions(+), 55 deletions(-) diff --git a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongOpenHashDataMap.java b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongOpenHashDataMap.java index 117fea28..485e85f0 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongOpenHashDataMap.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongOpenHashDataMap.java @@ -262,8 +262,9 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap } key.set(pos, k); value.set(pos, defRetValue + incr); - if (size.incrementAndGet() >= maxFill) + if (size.incrementAndGet() >= maxFill) { rehash(bigArraySize(size.get() + 1, f)); + } return defRetValue; } @@ -296,7 +297,6 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap } @Override - public long remove(final long k) { if (((k) == 0)) { if (containsNullKey) { @@ -324,7 +324,6 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap } @Override - public long get(final long k) { if (((k) == 0)) { return containsNullKey ? value.get(n) : defRetValue; @@ -350,7 +349,6 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap } @Override - public boolean containsKey(final long k) { if (((k) == 0)) { return containsNullKey; @@ -392,7 +390,6 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap * {@inheritDoc} */ @Override - public long getOrDefault(final long k, final long defaultValue) { if (((k) == 0)) { return containsNullKey ? value.get(n) : defaultValue; @@ -434,7 +431,6 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap * {@inheritDoc} */ @Override - public boolean remove(final long k, final long v) { if (((k) == 0)) { if (containsNullKey && ((v) == (value.get(n)))) { @@ -641,6 +637,8 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap } size.set(0); containsNullKey = false; + key.clear(); + value.clear(); } @Override @@ -722,7 +720,6 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap * * @deprecated Please use the corresponding type-specific method instead. */ - @Deprecated @Override public Long getValue() { return value.get(index); @@ -733,7 +730,6 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap * * @deprecated Please use the corresponding type-specific method instead. */ - @Deprecated @Override public Long setValue(final Long v) { return setValue((v).longValue()); @@ -832,7 +828,7 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap if (--pos < 0) { // We are just enumerating elements from the wrapped list. last = Integer.MIN_VALUE; - final long k = wrapped.getLong((int) -pos - 1); // TODO: check if -pos - 1 is correct + final long k = wrapped.getLong((int) -pos - 1); long p = (int) HashCommon.mix((k)) & mask; while (!(k == (key.get(p)))) { p = (p + 1) & mask; @@ -1074,7 +1070,8 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap } } - private final class EntrySpliterator extends + private final class EntrySpliterator + extends Long2LongOpenHashDataMap.MapSpliterator<Consumer<? super Long2LongMap.Entry>, Long2LongOpenHashDataMap.EntrySpliterator> implements ObjectSpliterator<Long2LongMap.Entry> { private static final int POST_SPLIT_CHARACTERISTICS = @@ -1104,7 +1101,8 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap } } - private final class MapEntrySet extends AbstractObjectSet<Long2LongMap.Entry> + private final class MapEntrySet + extends AbstractObjectSet<Long2LongMap.Entry> implements FastEntrySet { @Override public ObjectIterator<Long2LongMap.Entry> iterator() { @@ -1126,9 +1124,7 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap return new Long2LongOpenHashDataMap.EntrySpliterator(); } - // @Override - public boolean contains(final Object o) { if (!(o instanceof Map.Entry)) { return false; @@ -1383,7 +1379,8 @@ public class Long2LongOpenHashDataMap extends AbstractLong2LongMap * {@link java.util.ListIterator#next()}/{@link java.util.ListIterator#previous()} methods (and * possibly their type-specific counterparts) so that they return values instead of entries. */ - private final class ValueIterator extends Long2LongOpenHashDataMap.MapIterator<LongConsumer> + private final class ValueIterator + extends Long2LongOpenHashDataMap.MapIterator<LongConsumer> implements LongIterator { public ValueIterator() { super(); diff --git a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongPackedOpenHashDataMap.java b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongPackedOpenHashDataMap.java index 679f1a0f..c293213d 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongPackedOpenHashDataMap.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2LongPackedOpenHashDataMap.java @@ -149,6 +149,9 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap return oldValue; } + /** + * {@inheritDoc} + */ @Override public void putAll(Map<? extends Long, ? extends Long> m) { if (f <= .5) { @@ -191,6 +194,9 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } } + /** + * {@inheritDoc} + */ @Override public long put(final long k, final long v) { final long pos = find(k); @@ -278,8 +284,10 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } } + /** + * {@inheritDoc} + */ @Override - public long remove(final long k) { if (((k) == 0)) { if (containsNullKey) { @@ -306,8 +314,10 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } } + /** + * {@inheritDoc} + */ @Override - public long get(final long k) { if (((k) == 0)) { return containsNullKey ? index.get(n).right() : defRetValue; @@ -332,8 +342,10 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } } + /** + * {@inheritDoc} + */ @Override - public boolean containsKey(final long k) { if (((k) == 0)) { return containsNullKey; @@ -358,6 +370,9 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } } + /** + * {@inheritDoc} + */ @Override public boolean containsValue(final long v) { if (containsNullKey && ((index.get(n).right()) == (v))) { @@ -375,7 +390,6 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap * {@inheritDoc} */ @Override - public long getOrDefault(final long k, final long defaultValue) { if (((k) == 0)) { return containsNullKey ? index.get(n).right() : defaultValue; @@ -610,12 +624,12 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap return newVal; } - /* + /** * Removes all elements from this map. * - * <p>To increase object reuse, this method does not change the table size. If you want to reduce - * the table size, you must use {@link #trim()}. - * + * <p> + * To increase object reuse, this method does not change the table size. If you want to reduce the + * table size, you must use {@link #trim()}. */ @Override public void clear() { @@ -624,19 +638,28 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } size.set(0); containsNullKey = false; - // TODO: Arrays.fill(key, 0); + index.clear(); } + /** + * {@inheritDoc} + */ @Override public boolean isEmpty() { return size.get() == 0; } + /** + * {@inheritDoc} + */ @Override public long size64() { return size.get(); } + /** + * {@inheritDoc} + */ @Override public int size() { return (int) Math.min(size64(), Integer.MAX_VALUE); @@ -697,7 +720,6 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap * * @deprecated Please use the corresponding type-specific method instead. */ - @Deprecated @Override public Long getKey() { return Long2LongPackedOpenHashDataMap.this.index.get(index).left(); @@ -708,7 +730,6 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap * * @deprecated Please use the corresponding type-specific method instead. */ - @Deprecated @Override public Long getValue() { return Long2LongPackedOpenHashDataMap.this.index.get(index).right(); @@ -719,7 +740,6 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap * * @deprecated Please use the corresponding type-specific method instead. */ - @Deprecated @Override public Long setValue(final Long v) { return setValue(v); @@ -753,26 +773,31 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap * An iterator over a hash map. */ private abstract class MapIterator<ConsumerType> { + /** * The index of the last entry returned, if positive or zero; initially, {@link #n}. If * negative, the last entry returned was that of the key of index {@code - pos - 1} from the * {@link #wrapped} list. */ long pos = n; + /** * The index of the last entry that has been returned (more precisely, the value of {@link #pos} * if {@link #pos} is positive, or {@link Integer#MIN_VALUE} if {@link #pos} is negative). It is * -1 if either we did not return an entry yet, or the last returned entry has been removed. */ long last = -1; + /** * A downward counter measuring how many entries must still be returned. */ long c = size.get(); + /** * A boolean telling us whether we should return the entry with the null key. */ boolean mustReturnNullKey = Long2LongPackedOpenHashDataMap.this.containsNullKey; + /** * A lazily allocated list containing keys of entries that have wrapped around the table because * of removals. @@ -910,7 +935,7 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap // forEachRemaining inherited from MapIterator superclass. @Override - final void acceptOnIndex(final Consumer<? super Long2LongMap.Entry> action, final long index) { + void acceptOnIndex(final Consumer<? super Long2LongMap.Entry> action, final long index) { action.accept(entry = new Long2LongPackedOpenHashDataMap.MapEntry(index)); } @@ -935,7 +960,7 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap // forEachRemaining inherited from MapIterator superclass. @Override - final void acceptOnIndex(final Consumer<? super Long2LongMap.Entry> action, final long index) { + void acceptOnIndex(final Consumer<? super Long2LongMap.Entry> action, final long index) { entry.index = index; action.accept(entry); } @@ -1085,12 +1110,12 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } @Override - final void acceptOnIndex(final Consumer<? super Long2LongMap.Entry> action, final long index) { + void acceptOnIndex(final Consumer<? super Long2LongMap.Entry> action, final long index) { action.accept(new Long2LongPackedOpenHashDataMap.MapEntry(index)); } @Override - final Long2LongPackedOpenHashDataMap.EntrySpliterator makeForSplit(long pos, long max, + Long2LongPackedOpenHashDataMap.EntrySpliterator makeForSplit(long pos, long max, boolean mustReturnNull) { return new Long2LongPackedOpenHashDataMap.EntrySpliterator(pos, max, mustReturnNull, true); } @@ -1118,9 +1143,7 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap return new Long2LongPackedOpenHashDataMap.EntrySpliterator(); } - // @Override - public boolean contains(final Object o) { if (!(o instanceof Map.Entry)) { return false; @@ -1159,7 +1182,6 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } @Override - public boolean remove(final Object o) { if (!(o instanceof Map.Entry)) { return false; @@ -1273,7 +1295,7 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap // methods // avoids the boxing/unboxing @Override - final void acceptOnIndex(final LongConsumer action, final long index) { + void acceptOnIndex(final LongConsumer action, final long index) { action.accept(Long2LongPackedOpenHashDataMap.this.index.get(index).left()); } @@ -1303,12 +1325,12 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } @Override - final void acceptOnIndex(final LongConsumer action, final long index) { + void acceptOnIndex(final LongConsumer action, final long index) { action.accept(Long2LongPackedOpenHashDataMap.this.index.get(index).left()); } @Override - final Long2LongPackedOpenHashDataMap.KeySpliterator makeForSplit(long pos, long max, + Long2LongPackedOpenHashDataMap.KeySpliterator makeForSplit(long pos, long max, boolean mustReturnNull) { return new Long2LongPackedOpenHashDataMap.KeySpliterator(pos, max, mustReturnNull, true); } @@ -1391,7 +1413,7 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap // methods // avoids the boxing/unboxing @Override - final void acceptOnIndex(final LongConsumer action, final long index) { + void acceptOnIndex(final LongConsumer action, final long index) { action.accept(Long2LongPackedOpenHashDataMap.this.index.get(index).right()); } @@ -1421,12 +1443,12 @@ public class Long2LongPackedOpenHashDataMap extends AbstractLong2LongMap } @Override - final void acceptOnIndex(final java.util.function.LongConsumer action, final long index) { + void acceptOnIndex(final java.util.function.LongConsumer action, final long index) { action.accept(Long2LongPackedOpenHashDataMap.this.index.get(index).right()); } @Override - final Long2LongPackedOpenHashDataMap.ValueSpliterator makeForSplit(long pos, long max, + Long2LongPackedOpenHashDataMap.ValueSpliterator makeForSplit(long pos, long max, boolean mustReturnNull) { return new Long2LongPackedOpenHashDataMap.ValueSpliterator(pos, max, mustReturnNull, true); } diff --git a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2ObjectOpenHashDataMap.java b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2ObjectOpenHashDataMap.java index 48426625..f92c66b0 100644 --- a/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2ObjectOpenHashDataMap.java +++ b/baremaps-core/src/main/java/org/apache/baremaps/database/collection/Long2ObjectOpenHashDataMap.java @@ -256,7 +256,6 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> } @Override - public V remove(final long k) { if (((k) == 0)) { if (containsNullKey) { @@ -284,7 +283,6 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> } @Override - public V get(final long k) { if (((k) == 0)) { return containsNullKey ? value.get(n) : defRetValue; @@ -310,7 +308,6 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> } @Override - public boolean containsKey(final long k) { if (((k) == 0)) { return containsNullKey; @@ -352,7 +349,6 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> * {@inheritDoc} */ @Override - public V getOrDefault(final long k, final V defaultValue) { if (((k) == 0)) { return containsNullKey ? value.get(n) : defaultValue; @@ -394,7 +390,6 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> * {@inheritDoc} */ @Override - public boolean remove(final long k, final Object v) { if (((k) == 0)) { if (containsNullKey && java.util.Objects.equals(v, value.get(n))) { @@ -583,8 +578,8 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> } size.set(0); containsNullKey = false; - // TODO: Arrays.fill(key, 0); - // TODO: Arrays.fill(value, null); + key.clear(); + value.clear(); } @Override @@ -732,7 +727,7 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> if (--pos < 0) { // We are just enumerating elements from the wrapped list. last = Integer.MIN_VALUE; - final long k = wrapped.getLong((int) -pos - 1); // TODO: check if -pos - 1 is correct + final long k = wrapped.getLong((int) -pos - 1); long p = HashCommon.mix((k)) & mask; while (!((k) == (key.get(p)))) { p = (p + 1) & mask; @@ -755,7 +750,7 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> if (--pos < 0) { // We are just enumerating elements from the wrapped list. last = Integer.MIN_VALUE; - final long k = wrapped.getLong((int) -pos - 1); // TODO: check if -pos - 1 is correct + final long k = wrapped.getLong((int) -pos - 1); long p = HashCommon.mix((k)) & mask; while (!((k) == (key.get(p)))) { p = (p + 1) & mask; @@ -1047,7 +1042,6 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> return new EntrySpliterator(); } - // @Override public boolean contains(final Object o) { if (!(o instanceof Map.Entry)) { @@ -1195,7 +1189,7 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> // methods // avoids the boxing/unboxing @Override - final void acceptOnIndex(final java.util.function.LongConsumer action, final long index) { + void acceptOnIndex(final java.util.function.LongConsumer action, final long index) { action.accept(key.get(index)); } @@ -1223,12 +1217,12 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> } @Override - final void acceptOnIndex(final java.util.function.LongConsumer action, final long index) { + void acceptOnIndex(final java.util.function.LongConsumer action, final long index) { action.accept(key.get(index)); } @Override - final KeySpliterator makeForSplit(long pos, long max, boolean mustReturnNull) { + KeySpliterator makeForSplit(long pos, long max, boolean mustReturnNull) { return new KeySpliterator(pos, max, mustReturnNull, true); } } @@ -1301,6 +1295,7 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> */ private final class ValueIterator extends MapIterator<Consumer<? super V>> implements ObjectIterator<V> { + public ValueIterator() { super(); } @@ -1310,7 +1305,7 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> // methods // avoids the boxing/unboxing @Override - final void acceptOnIndex(final Consumer<? super V> action, final long index) { + void acceptOnIndex(final Consumer<? super V> action, final long index) { action.accept(value.get(index)); } @@ -1338,12 +1333,12 @@ public class Long2ObjectOpenHashDataMap<V> extends AbstractLong2ObjectMap<V> } @Override - final void acceptOnIndex(final Consumer<? super V> action, final long index) { + void acceptOnIndex(final Consumer<? super V> action, final long index) { action.accept(value.get(index)); } @Override - final ValueSpliterator makeForSplit(long pos, long max, boolean mustReturnNull) { + ValueSpliterator makeForSplit(long pos, long max, boolean mustReturnNull) { return new ValueSpliterator(pos, max, mustReturnNull, true); } }
