--- old/src/os/windows/vm/os_windows.cpp 2012-12-13 05:31:22.000000000 +0100 +++ new/src/os/windows/vm/os_windows.cpp 2012-12-13 05:31:21.000000000 +0100 @@ -2895,6 +2895,28 @@ } } +char* os::reserve_memory_aligned(size_t bytes, size_t alignment) { + size_t size = align_size_up(bytes, alignment); + size_t extra_size = size + alignment; + char* aligned_base = NULL; + + do { + char* extra_base = os::reserve_memory(extra_size, NULL, alignment); + if (extra_base == NULL) { + return NULL; + } + // Do manual alignment + aligned_base = (char*) align_size_up((uintptr_t) extra_base, alignment); + + os::release_memory(extra_base, extra_size); + + aligned_base = os::reserve_memory(size, aligned_base); + + } while (aligned_base == NULL); + + return aligned_base; +} + char* os::pd_reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { assert((size_t)addr % os::vm_allocation_granularity() == 0, "reserve alignment");