diff options
Diffstat (limited to 'unsafe')
-rw-r--r-- | unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java | 9 | ||||
-rw-r--r-- | unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java | 3 |
2 files changed, 4 insertions, 8 deletions
diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java b/unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java index ebe90d9e63..09847cec9c 100644 --- a/unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java +++ b/unsafe/src/main/java/org/apache/spark/unsafe/memory/HeapMemoryAllocator.java @@ -23,6 +23,8 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.Map; +import org.apache.spark.unsafe.Platform; + /** * A simple {@link MemoryAllocator} that can allocate up to 16GB using a JVM long primitive array. */ @@ -45,9 +47,6 @@ public class HeapMemoryAllocator implements MemoryAllocator { @Override public MemoryBlock allocate(long size) throws OutOfMemoryError { - if (size % 8 != 0) { - throw new IllegalArgumentException("Size " + size + " was not a multiple of 8"); - } if (shouldPool(size)) { synchronized (this) { final LinkedList<WeakReference<MemoryBlock>> pool = bufferPoolsBySize.get(size); @@ -64,8 +63,8 @@ public class HeapMemoryAllocator implements MemoryAllocator { } } } - long[] array = new long[(int) (size / 8)]; - return MemoryBlock.fromLongArray(array); + long[] array = new long[(int) ((size + 7) / 8)]; + return new MemoryBlock(array, Platform.LONG_ARRAY_OFFSET, size); } @Override diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java b/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java index cda7826c8c..98ce711176 100644 --- a/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java +++ b/unsafe/src/main/java/org/apache/spark/unsafe/memory/UnsafeMemoryAllocator.java @@ -26,9 +26,6 @@ public class UnsafeMemoryAllocator implements MemoryAllocator { @Override public MemoryBlock allocate(long size) throws OutOfMemoryError { - if (size % 8 != 0) { - throw new IllegalArgumentException("Size " + size + " was not a multiple of 8"); - } long address = Platform.allocateMemory(size); return new MemoryBlock(null, address, size); } |