< prev index next >

src/java.base/share/classes/jdk/internal/misc/Unsafe.java

Print this page
rev 57826 : 8237521: Memory Access API fixes for 32-bit
Reviewed-by: mcimadamore, dholmes

*** 1,7 **** /* ! * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 582,591 **** --- 582,602 ---- /// wrappers for malloc, realloc, free: /** + * Round up allocation size to a multiple of HeapWordSize. + */ + private long alignToHeapWordSize(long bytes) { + if (bytes >= 0) { + return (bytes + ADDRESS_SIZE - 1) & ~(ADDRESS_SIZE - 1); + } else { + throw invalidInput(); + } + } + + /** * Allocates a new block of native memory, of the given size in bytes. The * contents of the memory are uninitialized; they will generally be * garbage. The resulting native pointer will never be zero, and will be * aligned for all value types. Dispose of this memory by calling {@link * #freeMemory}, or resize it with {@link #reallocateMemory}.
*** 606,615 **** --- 617,628 ---- * * @see #getByte(long) * @see #putByte(long, byte) */ public long allocateMemory(long bytes) { + bytes = alignToHeapWordSize(bytes); + allocateMemoryChecks(bytes); if (bytes == 0) { return 0; }
*** 659,668 **** --- 672,683 ---- * @throws OutOfMemoryError if the allocation is refused by the system * * @see #allocateMemory */ public long reallocateMemory(long address, long bytes) { + bytes = alignToHeapWordSize(bytes); + reallocateMemoryChecks(address, bytes); if (bytes == 0) { freeMemory(address); return 0;
< prev index next >