src/share/vm/services/g1MemoryPool.cpp

Wed, 25 Aug 2010 08:44:58 -0400

author
tonyp
date
Wed, 25 Aug 2010 08:44:58 -0400
changeset 2109
e967bad2a9ab
parent 1907
c18cbe5936b8
child 2314
f95d63e2154a
permissions
-rw-r--r--

6941275: G1: The MemoryPools are incorrectly supported for G1
Summary: The way we were caluclating the max value meant that it might fluctuate during the run and this broke some assumptions inside the MBeans framework. This change sets the max value of each pool to -1, which means undefined according to the spec.
Reviewed-by: mchung, johnc

tonyp@1524 1 /*
trims@1907 2 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
tonyp@1524 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
tonyp@1524 4 *
tonyp@1524 5 * This code is free software; you can redistribute it and/or modify it
tonyp@1524 6 * under the terms of the GNU General Public License version 2 only, as
tonyp@1524 7 * published by the Free Software Foundation.
tonyp@1524 8 *
tonyp@1524 9 * This code is distributed in the hope that it will be useful, but WITHOUT
tonyp@1524 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
tonyp@1524 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
tonyp@1524 12 * version 2 for more details (a copy is included in the LICENSE file that
tonyp@1524 13 * accompanied this code).
tonyp@1524 14 *
tonyp@1524 15 * You should have received a copy of the GNU General Public License version
tonyp@1524 16 * 2 along with this work; if not, write to the Free Software Foundation,
tonyp@1524 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
tonyp@1524 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
tonyp@1524 22 *
tonyp@1524 23 */
tonyp@1524 24
tonyp@1524 25 # include "incls/_precompiled.incl"
tonyp@1524 26 # include "incls/_g1MemoryPool.cpp.incl"
tonyp@1524 27
tonyp@1524 28 G1MemoryPoolSuper::G1MemoryPoolSuper(G1CollectedHeap* g1h,
tonyp@1524 29 const char* name,
tonyp@1524 30 size_t init_size,
tonyp@1524 31 bool support_usage_threshold) :
tonyp@1524 32 _g1h(g1h), CollectedMemoryPool(name,
tonyp@1524 33 MemoryPool::Heap,
tonyp@1524 34 init_size,
tonyp@2109 35 undefined_max(),
tonyp@1524 36 support_usage_threshold) {
tonyp@1524 37 assert(UseG1GC, "sanity");
tonyp@1524 38 }
tonyp@1524 39
tonyp@1524 40 // See the comment at the top of g1MemoryPool.hpp
tonyp@1524 41 size_t G1MemoryPoolSuper::eden_space_committed(G1CollectedHeap* g1h) {
tonyp@1529 42 return MAX2(eden_space_used(g1h), (size_t) HeapRegion::GrainBytes);
tonyp@1524 43 }
tonyp@1524 44
tonyp@1524 45 // See the comment at the top of g1MemoryPool.hpp
tonyp@1524 46 size_t G1MemoryPoolSuper::eden_space_used(G1CollectedHeap* g1h) {
johnc@1829 47 size_t young_list_length = g1h->young_list()->length();
tonyp@1524 48 size_t eden_used = young_list_length * HeapRegion::GrainBytes;
tonyp@1524 49 size_t survivor_used = survivor_space_used(g1h);
tonyp@1524 50 eden_used = subtract_up_to_zero(eden_used, survivor_used);
tonyp@1524 51 return eden_used;
tonyp@1524 52 }
tonyp@1524 53
tonyp@1524 54 // See the comment at the top of g1MemoryPool.hpp
tonyp@1524 55 size_t G1MemoryPoolSuper::survivor_space_committed(G1CollectedHeap* g1h) {
tonyp@1529 56 return MAX2(survivor_space_used(g1h), (size_t) HeapRegion::GrainBytes);
tonyp@1524 57 }
tonyp@1524 58
tonyp@1524 59 // See the comment at the top of g1MemoryPool.hpp
tonyp@1524 60 size_t G1MemoryPoolSuper::survivor_space_used(G1CollectedHeap* g1h) {
tonyp@1524 61 size_t survivor_num = g1h->g1_policy()->recorded_survivor_regions();
tonyp@1524 62 size_t survivor_used = survivor_num * HeapRegion::GrainBytes;
tonyp@1524 63 return survivor_used;
tonyp@1524 64 }
tonyp@1524 65
tonyp@1524 66 // See the comment at the top of g1MemoryPool.hpp
tonyp@1524 67 size_t G1MemoryPoolSuper::old_space_committed(G1CollectedHeap* g1h) {
tonyp@1524 68 size_t committed = overall_committed(g1h);
tonyp@1524 69 size_t eden_committed = eden_space_committed(g1h);
tonyp@1524 70 size_t survivor_committed = survivor_space_committed(g1h);
tonyp@1524 71 committed = subtract_up_to_zero(committed, eden_committed);
tonyp@1524 72 committed = subtract_up_to_zero(committed, survivor_committed);
tonyp@1529 73 committed = MAX2(committed, (size_t) HeapRegion::GrainBytes);
tonyp@1524 74 return committed;
tonyp@1524 75 }
tonyp@1524 76
tonyp@1524 77 // See the comment at the top of g1MemoryPool.hpp
tonyp@1524 78 size_t G1MemoryPoolSuper::old_space_used(G1CollectedHeap* g1h) {
tonyp@1524 79 size_t used = overall_used(g1h);
tonyp@1524 80 size_t eden_used = eden_space_used(g1h);
tonyp@1524 81 size_t survivor_used = survivor_space_used(g1h);
tonyp@1524 82 used = subtract_up_to_zero(used, eden_used);
tonyp@1524 83 used = subtract_up_to_zero(used, survivor_used);
tonyp@1524 84 return used;
tonyp@1524 85 }
tonyp@1524 86
tonyp@1524 87 G1EdenPool::G1EdenPool(G1CollectedHeap* g1h) :
tonyp@1524 88 G1MemoryPoolSuper(g1h,
tonyp@1524 89 "G1 Eden",
tonyp@1524 90 eden_space_committed(g1h), /* init_size */
tonyp@2109 91 false /* support_usage_threshold */) { }
tonyp@1524 92
tonyp@1524 93 MemoryUsage G1EdenPool::get_memory_usage() {
tonyp@1527 94 size_t initial_sz = initial_size();
tonyp@1527 95 size_t max_sz = max_size();
tonyp@1527 96 size_t used = used_in_bytes();
tonyp@1528 97 size_t committed = eden_space_committed(_g1h);
tonyp@1524 98
tonyp@1527 99 return MemoryUsage(initial_sz, used, committed, max_sz);
tonyp@1524 100 }
tonyp@1524 101
tonyp@1524 102 G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) :
tonyp@1524 103 G1MemoryPoolSuper(g1h,
tonyp@1524 104 "G1 Survivor",
tonyp@1524 105 survivor_space_committed(g1h), /* init_size */
tonyp@2109 106 false /* support_usage_threshold */) { }
tonyp@1524 107
tonyp@1524 108 MemoryUsage G1SurvivorPool::get_memory_usage() {
tonyp@1527 109 size_t initial_sz = initial_size();
tonyp@1527 110 size_t max_sz = max_size();
tonyp@1527 111 size_t used = used_in_bytes();
tonyp@1528 112 size_t committed = survivor_space_committed(_g1h);
tonyp@1524 113
tonyp@1527 114 return MemoryUsage(initial_sz, used, committed, max_sz);
tonyp@1524 115 }
tonyp@1524 116
tonyp@1524 117 G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) :
tonyp@1524 118 G1MemoryPoolSuper(g1h,
tonyp@1524 119 "G1 Old Gen",
tonyp@1524 120 old_space_committed(g1h), /* init_size */
tonyp@2109 121 true /* support_usage_threshold */) { }
tonyp@1524 122
tonyp@1524 123 MemoryUsage G1OldGenPool::get_memory_usage() {
tonyp@1527 124 size_t initial_sz = initial_size();
tonyp@1527 125 size_t max_sz = max_size();
tonyp@1527 126 size_t used = used_in_bytes();
tonyp@1528 127 size_t committed = old_space_committed(_g1h);
tonyp@1524 128
tonyp@1527 129 return MemoryUsage(initial_sz, used, committed, max_sz);
tonyp@1524 130 }

mercurial