comparison src/share/vm/services/g1MemoryPool.cpp @ 1754:e967bad2a9ab

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
author tonyp
date Wed, 25 Aug 2010 08:44:58 -0400
parents c18cbe5936b8
children f95d63e2154a
comparison
equal deleted inserted replaced
1753:bba76f745fe6 1754:e967bad2a9ab
26 # include "incls/_g1MemoryPool.cpp.incl" 26 # include "incls/_g1MemoryPool.cpp.incl"
27 27
28 G1MemoryPoolSuper::G1MemoryPoolSuper(G1CollectedHeap* g1h, 28 G1MemoryPoolSuper::G1MemoryPoolSuper(G1CollectedHeap* g1h,
29 const char* name, 29 const char* name,
30 size_t init_size, 30 size_t init_size,
31 size_t max_size,
32 bool support_usage_threshold) : 31 bool support_usage_threshold) :
33 _g1h(g1h), CollectedMemoryPool(name, 32 _g1h(g1h), CollectedMemoryPool(name,
34 MemoryPool::Heap, 33 MemoryPool::Heap,
35 init_size, 34 init_size,
36 max_size, 35 undefined_max(),
37 support_usage_threshold) { 36 support_usage_threshold) {
38 assert(UseG1GC, "sanity"); 37 assert(UseG1GC, "sanity");
39 } 38 }
40 39
41 // See the comment at the top of g1MemoryPool.hpp 40 // See the comment at the top of g1MemoryPool.hpp
51 eden_used = subtract_up_to_zero(eden_used, survivor_used); 50 eden_used = subtract_up_to_zero(eden_used, survivor_used);
52 return eden_used; 51 return eden_used;
53 } 52 }
54 53
55 // See the comment at the top of g1MemoryPool.hpp 54 // See the comment at the top of g1MemoryPool.hpp
56 size_t G1MemoryPoolSuper::eden_space_max(G1CollectedHeap* g1h) {
57 // This should ensure that it returns a value no smaller than the
58 // region size. Currently, eden_space_committed() guarantees that.
59 return eden_space_committed(g1h);
60 }
61
62 // See the comment at the top of g1MemoryPool.hpp
63 size_t G1MemoryPoolSuper::survivor_space_committed(G1CollectedHeap* g1h) { 55 size_t G1MemoryPoolSuper::survivor_space_committed(G1CollectedHeap* g1h) {
64 return MAX2(survivor_space_used(g1h), (size_t) HeapRegion::GrainBytes); 56 return MAX2(survivor_space_used(g1h), (size_t) HeapRegion::GrainBytes);
65 } 57 }
66 58
67 // See the comment at the top of g1MemoryPool.hpp 59 // See the comment at the top of g1MemoryPool.hpp
68 size_t G1MemoryPoolSuper::survivor_space_used(G1CollectedHeap* g1h) { 60 size_t G1MemoryPoolSuper::survivor_space_used(G1CollectedHeap* g1h) {
69 size_t survivor_num = g1h->g1_policy()->recorded_survivor_regions(); 61 size_t survivor_num = g1h->g1_policy()->recorded_survivor_regions();
70 size_t survivor_used = survivor_num * HeapRegion::GrainBytes; 62 size_t survivor_used = survivor_num * HeapRegion::GrainBytes;
71 return survivor_used; 63 return survivor_used;
72 }
73
74 // See the comment at the top of g1MemoryPool.hpp
75 size_t G1MemoryPoolSuper::survivor_space_max(G1CollectedHeap* g1h) {
76 // This should ensure that it returns a value no smaller than the
77 // region size. Currently, survivor_space_committed() guarantees that.
78 return survivor_space_committed(g1h);
79 } 64 }
80 65
81 // See the comment at the top of g1MemoryPool.hpp 66 // See the comment at the top of g1MemoryPool.hpp
82 size_t G1MemoryPoolSuper::old_space_committed(G1CollectedHeap* g1h) { 67 size_t G1MemoryPoolSuper::old_space_committed(G1CollectedHeap* g1h) {
83 size_t committed = overall_committed(g1h); 68 size_t committed = overall_committed(g1h);
97 used = subtract_up_to_zero(used, eden_used); 82 used = subtract_up_to_zero(used, eden_used);
98 used = subtract_up_to_zero(used, survivor_used); 83 used = subtract_up_to_zero(used, survivor_used);
99 return used; 84 return used;
100 } 85 }
101 86
102 // See the comment at the top of g1MemoryPool.hpp
103 size_t G1MemoryPoolSuper::old_space_max(G1CollectedHeap* g1h) {
104 size_t max = overall_max(g1h);
105 size_t eden_max = eden_space_max(g1h);
106 size_t survivor_max = survivor_space_max(g1h);
107 max = subtract_up_to_zero(max, eden_max);
108 max = subtract_up_to_zero(max, survivor_max);
109 max = MAX2(max, (size_t) HeapRegion::GrainBytes);
110 return max;
111 }
112
113 G1EdenPool::G1EdenPool(G1CollectedHeap* g1h) : 87 G1EdenPool::G1EdenPool(G1CollectedHeap* g1h) :
114 G1MemoryPoolSuper(g1h, 88 G1MemoryPoolSuper(g1h,
115 "G1 Eden", 89 "G1 Eden",
116 eden_space_committed(g1h), /* init_size */ 90 eden_space_committed(g1h), /* init_size */
117 eden_space_max(g1h), /* max_size */ 91 false /* support_usage_threshold */) { }
118 false /* support_usage_threshold */) {
119 }
120 92
121 MemoryUsage G1EdenPool::get_memory_usage() { 93 MemoryUsage G1EdenPool::get_memory_usage() {
122 size_t initial_sz = initial_size(); 94 size_t initial_sz = initial_size();
123 size_t max_sz = max_size(); 95 size_t max_sz = max_size();
124 size_t used = used_in_bytes(); 96 size_t used = used_in_bytes();
129 101
130 G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) : 102 G1SurvivorPool::G1SurvivorPool(G1CollectedHeap* g1h) :
131 G1MemoryPoolSuper(g1h, 103 G1MemoryPoolSuper(g1h,
132 "G1 Survivor", 104 "G1 Survivor",
133 survivor_space_committed(g1h), /* init_size */ 105 survivor_space_committed(g1h), /* init_size */
134 survivor_space_max(g1h), /* max_size */ 106 false /* support_usage_threshold */) { }
135 false /* support_usage_threshold */) {
136 }
137 107
138 MemoryUsage G1SurvivorPool::get_memory_usage() { 108 MemoryUsage G1SurvivorPool::get_memory_usage() {
139 size_t initial_sz = initial_size(); 109 size_t initial_sz = initial_size();
140 size_t max_sz = max_size(); 110 size_t max_sz = max_size();
141 size_t used = used_in_bytes(); 111 size_t used = used_in_bytes();
146 116
147 G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) : 117 G1OldGenPool::G1OldGenPool(G1CollectedHeap* g1h) :
148 G1MemoryPoolSuper(g1h, 118 G1MemoryPoolSuper(g1h,
149 "G1 Old Gen", 119 "G1 Old Gen",
150 old_space_committed(g1h), /* init_size */ 120 old_space_committed(g1h), /* init_size */
151 old_space_max(g1h), /* max_size */ 121 true /* support_usage_threshold */) { }
152 true /* support_usage_threshold */) {
153 }
154 122
155 MemoryUsage G1OldGenPool::get_memory_usage() { 123 MemoryUsage G1OldGenPool::get_memory_usage() {
156 size_t initial_sz = initial_size(); 124 size_t initial_sz = initial_size();
157 size_t max_sz = max_size(); 125 size_t max_sz = max_size();
158 size_t used = used_in_bytes(); 126 size_t used = used_in_bytes();