diff --git a/source/net/yacy/kelondro/index/RowCollection.java b/source/net/yacy/kelondro/index/RowCollection.java index ceeb4d6c7..b572dcf64 100644 --- a/source/net/yacy/kelondro/index/RowCollection.java +++ b/source/net/yacy/kelondro/index/RowCollection.java @@ -208,6 +208,11 @@ public class RowCollection implements Iterable { return this.rowdef; } + protected final int maxIntFromLong(long val) { + if (val >= Integer.MAX_VALUE) return Integer.MAX_VALUE; + return (int) val; + } + protected final long neededSpaceForEnsuredSize(final int elements, final boolean forcegc) { assert elements > 0 : "elements = " + elements; final long needed = elements * rowdef.objectsize; @@ -224,12 +229,12 @@ public class RowCollection implements Iterable { protected final void ensureSize(final int elements) throws RowSpaceExceededException { if (elements == 0) return; - final long allocram = neededSpaceForEnsuredSize(elements, true); + final int allocram = maxIntFromLong(neededSpaceForEnsuredSize(elements, true)); if (allocram == 0) return; assert allocram > chunkcache.length : "wrong alloc computation: allocram = " + allocram + ", chunkcache.length = " + chunkcache.length; if (!MemoryControl.request(allocram, true)) throw new RowSpaceExceededException(allocram, "RowCollection grow"); try { - final byte[] newChunkcache = new byte[(int) allocram]; // increase space + final byte[] newChunkcache = new byte[allocram]; // increase space System.arraycopy(chunkcache, 0, newChunkcache, 0, chunkcache.length); chunkcache = newChunkcache; } catch (OutOfMemoryError e) {