# HG changeset patch # User tonyp # Date 1259930675 18000 # Node ID ed52bcc3273958c527ce3cbf75c52498839197cd # Parent 6aa7255741f36fe6475fa3532c92aeda9db647f8 6880903: G1: G1 reports incorrect Runtime.maxMemory() Summary: G1 reports committed memory instead of reserved memory from the Runtime.maxMemory() method Reviewed-by: ysr, jmasa diff -r 6aa7255741f3 -r ed52bcc32739 src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Dec 03 15:01:57 2009 -0800 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Dec 04 07:44:35 2009 -0500 @@ -2130,7 +2130,7 @@ } size_t G1CollectedHeap::max_capacity() const { - return _g1_committed.byte_size(); + return g1_reserved_obj_bytes(); } jlong G1CollectedHeap::millis_since_last_gc() { diff -r 6aa7255741f3 -r ed52bcc32739 src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Thu Dec 03 15:01:57 2009 -0800 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Fri Dec 04 07:44:35 2009 -0500 @@ -692,7 +692,7 @@ // Reserved (g1 only; super method includes perm), capacity and the used // portion in bytes. - size_t g1_reserved_obj_bytes() { return _g1_reserved.byte_size(); } + size_t g1_reserved_obj_bytes() const { return _g1_reserved.byte_size(); } virtual size_t capacity() const; virtual size_t used() const; // This should be called when we're not holding the heap lock. The diff -r 6aa7255741f3 -r ed52bcc32739 src/share/vm/services/g1MemoryPool.cpp --- a/src/share/vm/services/g1MemoryPool.cpp Thu Dec 03 15:01:57 2009 -0800 +++ b/src/share/vm/services/g1MemoryPool.cpp Fri Dec 04 07:44:35 2009 -0500 @@ -96,7 +96,7 @@ // See the comment at the top of g1MemoryPool.hpp size_t G1MemoryPoolSuper::old_space_max(G1CollectedHeap* g1h) { - size_t max = g1h->g1_reserved_obj_bytes(); + size_t max = overall_max(g1h); size_t eden_max = eden_space_max(g1h); size_t survivor_max = survivor_space_max(g1h); max = subtract_up_to_zero(max, eden_max); @@ -113,11 +113,12 @@ } MemoryUsage G1EdenPool::get_memory_usage() { - size_t maxSize = max_size(); - size_t used = used_in_bytes(); - size_t committed = eden_space_committed(); + size_t initial_sz = initial_size(); + size_t max_sz = max_size(); + size_t used = used_in_bytes(); + size_t committed = eden_space_committed(); - return MemoryUsage(initial_size(), used, committed, maxSize); + return MemoryUsage(initial_sz, used, committed, max_sz); } G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) : @@ -129,11 +130,12 @@ } MemoryUsage G1SurvivorPool::get_memory_usage() { - size_t maxSize = max_size(); - size_t used = used_in_bytes(); - size_t committed = survivor_space_committed(); + size_t initial_sz = initial_size(); + size_t max_sz = max_size(); + size_t used = used_in_bytes(); + size_t committed = survivor_space_committed(); - return MemoryUsage(initial_size(), used, committed, maxSize); + return MemoryUsage(initial_sz, used, committed, max_sz); } G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) : @@ -145,9 +147,10 @@ } MemoryUsage G1OldGenPool::get_memory_usage() { - size_t maxSize = max_size(); - size_t used = used_in_bytes(); - size_t committed = old_space_committed(); + size_t initial_sz = initial_size(); + size_t max_sz = max_size(); + size_t used = used_in_bytes(); + size_t committed = old_space_committed(); - return MemoryUsage(initial_size(), used, committed, maxSize); + return MemoryUsage(initial_sz, used, committed, max_sz); } diff -r 6aa7255741f3 -r ed52bcc32739 src/share/vm/services/g1MemoryPool.hpp --- a/src/share/vm/services/g1MemoryPool.hpp Thu Dec 03 15:01:57 2009 -0800 +++ b/src/share/vm/services/g1MemoryPool.hpp Fri Dec 04 07:44:35 2009 -0500 @@ -137,6 +137,9 @@ static size_t overall_used(G1CollectedHeap* g1h) { return g1h->used_unlocked(); } + static size_t overall_max(G1CollectedHeap* g1h) { + return g1h->g1_reserved_obj_bytes(); + } static size_t eden_space_committed(G1CollectedHeap* g1h); static size_t eden_space_used(G1CollectedHeap* g1h);