public static long reallocateMemory(long address, long oldSize, long newSize) { long newMemory = UNSAFE.allocateMemory(newSize); copyMemory(null, address, null, newMemory, oldSize); freeMemory(address); return newMemory; }
/** * Uses internal JDK APIs to allocate a DirectByteBuffer while ignoring the JVM's * MaxDirectMemorySize limit (the default limit is too low and we do not want to require users * to increase it). */ @SuppressWarnings("unchecked") public static ByteBuffer allocateDirectBuffer(int size) { try { Class cls = Class.forName("java.nio.DirectByteBuffer"); Constructor constructor = cls.getDeclaredConstructor(Long.TYPE, Integer.TYPE); constructor.setAccessible(true); Field cleanerField = cls.getDeclaredField("cleaner"); cleanerField.setAccessible(true); final long memory = allocateMemory(size); ByteBuffer buffer = (ByteBuffer) constructor.newInstance(memory, size); Cleaner cleaner = Cleaner.create(buffer, new Runnable() { @Override public void run() { freeMemory(memory); } }); cleanerField.set(buffer, cleaner); return buffer; } catch (Exception e) { throwException(e); } throw new IllegalStateException("unreachable"); }
Platform.copyMemory(data, Platform.BYTE_ARRAY_OFFSET, data, Platform.BYTE_ARRAY_OFFSET, size); for (int i = 0; i < data.length; ++i) { Assert.assertEquals((byte) i, data[i]); Platform.copyMemory( data, Platform.BYTE_ARRAY_OFFSET + 1, data[i] = (byte) i; Platform.copyMemory( data, Platform.BYTE_ARRAY_OFFSET,
if (bufferPoolPageSize * bufferPoolPageNumber > Platform.getMaxDirectMemory()) { throw new IOException("Direct BufferPool size lager than MaxDirectMemory");
@Override public void run() { freeMemory(memory); } });
Class t; try { t = Class.forName("sun.misc.VM", true, getSystemClassLoader()); Method runtimeClass = t.getDeclaredMethod("maxDirectMemory"); maxDirectMemory = ((Number) runtimeClass.invoke(null, new Object[0])).longValue(); } else { try { t = Class.forName("java.lang.management.ManagementFactory", true, getSystemClassLoader()); Class var10 = Class.forName("java.lang.management.RuntimeMXBean", true, getSystemClassLoader()); Object runtime = t.getDeclaredMethod("getRuntimeMXBean", new Class[0]).invoke(null); List vmArgs = (List) var10.getDeclaredMethod("getInputArguments", new Class[0]).invoke(runtime, new Object[0]);
long totalAvailable = Platform.getMaxDirectMemory(); row.add(StringUtil.encode(JavaUtils.bytesToString2(totalAvailable), c.getCharset().getResults()));