# HG changeset patch # User jmasa # Date 1325614939 28800 # Node ID 5ee33ff9b1c444839ee097b7d16948b7754e9b7f # Parent 3db6ea5ce0218a77e912344fde0056d633d3eaa9# Parent 776173fc2df94d52740537865cb320555860b280 Merge diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/os/bsd/vm/os_bsd.cpp --- a/src/os/bsd/vm/os_bsd.cpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/os/bsd/vm/os_bsd.cpp Tue Jan 03 10:22:19 2012 -0800 @@ -2835,7 +2835,7 @@ #endif } -void os::free_memory(char *addr, size_t bytes) { +void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { ::madvise(addr, bytes, MADV_DONTNEED); } diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/os/linux/vm/os_linux.cpp --- a/src/os/linux/vm/os_linux.cpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/os/linux/vm/os_linux.cpp Tue Jan 03 10:22:19 2012 -0800 @@ -2546,8 +2546,8 @@ } } -void os::free_memory(char *addr, size_t bytes) { - commit_memory(addr, bytes, false); +void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { + commit_memory(addr, bytes, alignment_hint, false); } void os::numa_make_global(char *addr, size_t bytes) { diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/os/solaris/vm/os_solaris.cpp --- a/src/os/solaris/vm/os_solaris.cpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/os/solaris/vm/os_solaris.cpp Tue Jan 03 10:22:19 2012 -0800 @@ -2821,7 +2821,7 @@ } // Uncommit the pages in a specified region. -void os::free_memory(char* addr, size_t bytes) { +void os::free_memory(char* addr, size_t bytes, size_t alignment_hint) { if (madvise(addr, bytes, MADV_FREE) < 0) { debug_only(warning("MADV_FREE failed.")); return; diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/os/windows/vm/os_windows.cpp --- a/src/os/windows/vm/os_windows.cpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/os/windows/vm/os_windows.cpp Tue Jan 03 10:22:19 2012 -0800 @@ -3130,7 +3130,7 @@ } void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } -void os::free_memory(char *addr, size_t bytes) { } +void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { } void os::numa_make_global(char *addr, size_t bytes) { } void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) { } bool os::numa_topology_changed() { return false; } diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/share/vm/gc_implementation/g1/concurrentMark.cpp --- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp Tue Jan 03 10:22:19 2012 -0800 @@ -726,12 +726,8 @@ } ConcurrentMark::~ConcurrentMark() { - for (int i = 0; i < (int) _max_task_num; ++i) { - delete _task_queues->queue(i); - delete _tasks[i]; - } - delete _task_queues; - FREE_C_HEAP_ARRAY(CMTask*, _max_task_num); + // The ConcurrentMark instance is never freed. + ShouldNotReachHere(); } // This closure is used to mark refs into the g1 generation diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp --- a/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Tue Jan 03 10:22:19 2012 -0800 @@ -282,7 +282,7 @@ // large page can be broken down if we require small pages. os::realign_memory((char*)aligned_region.start(), aligned_region.byte_size(), page_size()); // Then we uncommit the pages in the range. - os::free_memory((char*)aligned_region.start(), aligned_region.byte_size()); + os::free_memory((char*)aligned_region.start(), aligned_region.byte_size(), page_size()); // And make them local/first-touch biased. os::numa_make_local((char*)aligned_region.start(), aligned_region.byte_size(), lgrp_id); } @@ -297,7 +297,7 @@ assert((intptr_t)aligned_region.start() % page_size() == 0 && (intptr_t)aligned_region.byte_size() % page_size() == 0, "Bad alignment"); assert(region().contains(aligned_region), "Sanity"); - os::free_memory((char*)aligned_region.start(), aligned_region.byte_size()); + os::free_memory((char*)aligned_region.start(), aligned_region.byte_size(), page_size()); } } @@ -954,7 +954,7 @@ if (e != scan_end) { if ((page_expected.size != page_size || page_expected.lgrp_id != lgrp_id()) && page_expected.size != 0) { - os::free_memory(s, pointer_delta(e, s, sizeof(char))); + os::free_memory(s, pointer_delta(e, s, sizeof(char)), page_size); } page_expected = page_found; } diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/share/vm/gc_implementation/shared/mutableSpace.cpp --- a/src/share/vm/gc_implementation/shared/mutableSpace.cpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/share/vm/gc_implementation/shared/mutableSpace.cpp Tue Jan 03 10:22:19 2012 -0800 @@ -51,7 +51,7 @@ size_t size = pointer_delta(end, start, sizeof(char)); if (clear_space) { // Prefer page reallocation to migration. - os::free_memory((char*)start, size); + os::free_memory((char*)start, size, page_size); } os::numa_make_global((char*)start, size); } diff -r 3db6ea5ce021 -r 5ee33ff9b1c4 src/share/vm/runtime/os.hpp --- a/src/share/vm/runtime/os.hpp Thu Dec 29 20:09:24 2011 -0500 +++ b/src/share/vm/runtime/os.hpp Tue Jan 03 10:22:19 2012 -0800 @@ -256,7 +256,7 @@ char *addr, size_t bytes, bool read_only, bool allow_exec); static bool unmap_memory(char *addr, size_t bytes); - static void free_memory(char *addr, size_t bytes); + static void free_memory(char *addr, size_t bytes, size_t alignment_hint); static void realign_memory(char *addr, size_t bytes, size_t alignment_hint); // NUMA-specific interface