/** * Reallocate memory. * * @param ptr Old pointer. * @param cap Capacity. * @return New pointer. */ protected long reallocate(long ptr, int cap) { return GridUnsafe.reallocateMemory(ptr, cap); }
/** * * @param buf Buffer. * @param len New length. * @return Reallocated direct buffer. */ public static ByteBuffer reallocateBuffer(ByteBuffer buf, int len) { long ptr = bufferAddress(buf); long newPtr = reallocateMemory(ptr, len); return wrapPointer(newPtr, len); }
/** * Reallocate unpooled memory chunk. * * @param memPtr Memory pointer. * @param cap Minimum capacity. */ public static void reallocateUnpooled(long memPtr, int cap) { assert cap > 0; assert !isExternal(memPtr) : "Attempt to reallocate external memory chunk directly: " + memPtr; assert !isPooled(memPtr) : "Attempt to reallocate pooled memory chunk directly: " + memPtr; long dataPtr = data(memPtr); long newDataPtr = GridUnsafe.reallocateMemory(dataPtr, cap); if (dataPtr != newDataPtr) GridUnsafe.putLong(memPtr, newDataPtr); // Write new data address if needed. GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); // Write new capacity. }
/** * Reallocate pooled memory chunk. * * @param memPtr Memory pointer. * @param cap Minimum capacity. */ public static void reallocatePooled(long memPtr, int cap) { assert !isExternal(memPtr); assert isPooled(memPtr); assert isAcquired(memPtr); long data = GridUnsafe.getLong(memPtr); assert data != 0; int curCap = capacity(memPtr); if (cap > curCap) { data = GridUnsafe.reallocateMemory(data, cap); GridUnsafe.putLong(memPtr, data); GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); } }
/** * Internal pooled memory chunk allocation routine. * * @param memPtr Memory pointer. * @param cap Capacity. */ private static void allocatePooled0(long memPtr, int cap) { assert !isExternal(memPtr); assert isPooled(memPtr); assert !isAcquired(memPtr); long data = GridUnsafe.getLong(memPtr); if (data == 0) { // First allocation of the chunk. data = GridUnsafe.allocateMemory(cap); GridUnsafe.putLong(memPtr, data); GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); } else { // Ensure that we have enough capacity. int curCap = capacity(memPtr); if (cap > curCap) { data = GridUnsafe.reallocateMemory(data, cap); GridUnsafe.putLong(memPtr, data); GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); } } flags(memPtr, FLAG_POOLED | FLAG_ACQUIRED); }
/** * Reallocate memory. * * @param ptr Old pointer. * @param cap Capacity. * @return New pointer. */ protected long reallocate(long ptr, int cap) { return GridUnsafe.reallocateMemory(ptr, cap); }
/** * * @param buf Buffer. * @param len New length. * @return Reallocated direct buffer. */ public static ByteBuffer reallocateBuffer(ByteBuffer buf, int len) { long ptr = bufferAddress(buf); long newPtr = reallocateMemory(ptr, len); return wrapPointer(newPtr, len); }
/** * Reallocate unpooled memory chunk. * * @param memPtr Memory pointer. * @param cap Minimum capacity. */ public static void reallocateUnpooled(long memPtr, int cap) { assert cap > 0; assert !isExternal(memPtr) : "Attempt to reallocate external memory chunk directly: " + memPtr; assert !isPooled(memPtr) : "Attempt to reallocate pooled memory chunk directly: " + memPtr; long dataPtr = data(memPtr); long newDataPtr = GridUnsafe.reallocateMemory(dataPtr, cap); if (dataPtr != newDataPtr) GridUnsafe.putLong(memPtr, newDataPtr); // Write new data address if needed. GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); // Write new capacity. }
/** * Reallocate pooled memory chunk. * * @param memPtr Memory pointer. * @param cap Minimum capacity. */ public static void reallocatePooled(long memPtr, int cap) { assert !isExternal(memPtr); assert isPooled(memPtr); assert isAcquired(memPtr); long data = GridUnsafe.getLong(memPtr); assert data != 0; int curCap = capacity(memPtr); if (cap > curCap) { data = GridUnsafe.reallocateMemory(data, cap); GridUnsafe.putLong(memPtr, data); GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); } }
/** * Internal pooled memory chunk allocation routine. * * @param memPtr Memory pointer. * @param cap Capacity. */ private static void allocatePooled0(long memPtr, int cap) { assert !isExternal(memPtr); assert isPooled(memPtr); assert !isAcquired(memPtr); long data = GridUnsafe.getLong(memPtr); if (data == 0) { // First allocation of the chunk. data = GridUnsafe.allocateMemory(cap); GridUnsafe.putLong(memPtr, data); GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); } else { // Ensure that we have enough capacity. int curCap = capacity(memPtr); if (cap > curCap) { data = GridUnsafe.reallocateMemory(data, cap); GridUnsafe.putLong(memPtr, data); GridUnsafe.putInt(memPtr + MEM_HDR_OFF_CAP, cap); } } flags(memPtr, FLAG_POOLED | FLAG_ACQUIRED); }