annotate src/share/vm/services/memoryService.cpp @ 1941:79d04223b8a5

Added caching for resolved types and resolved fields. This is crucial, because the local load elimination will lead to wrong results, if field equality (of two RiField objects with the same object and the same RiType) is not given. The caching makes sure that the default equals implementation is sufficient.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Tue, 28 Dec 2010 18:33:26 +0100
parents f6f3eef8a521
children f95d63e2154a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1089
diff changeset
2 * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1089
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1089
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1089
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
a61af66fc99e Initial load
duke
parents:
diff changeset
25 # include "incls/_precompiled.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
26 # include "incls/_memoryService.cpp.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
27
a61af66fc99e Initial load
duke
parents:
diff changeset
28 GrowableArray<MemoryPool*>* MemoryService::_pools_list =
a61af66fc99e Initial load
duke
parents:
diff changeset
29 new (ResourceObj::C_HEAP) GrowableArray<MemoryPool*>(init_pools_list_size, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
30 GrowableArray<MemoryManager*>* MemoryService::_managers_list =
a61af66fc99e Initial load
duke
parents:
diff changeset
31 new (ResourceObj::C_HEAP) GrowableArray<MemoryManager*>(init_managers_list_size, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
32
a61af66fc99e Initial load
duke
parents:
diff changeset
33 GCMemoryManager* MemoryService::_minor_gc_manager = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
34 GCMemoryManager* MemoryService::_major_gc_manager = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 MemoryPool* MemoryService::_code_heap_pool = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
36
a61af66fc99e Initial load
duke
parents:
diff changeset
37 class GcThreadCountClosure: public ThreadClosure {
a61af66fc99e Initial load
duke
parents:
diff changeset
38 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
39 int _count;
a61af66fc99e Initial load
duke
parents:
diff changeset
40 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
41 GcThreadCountClosure() : _count(0) {};
a61af66fc99e Initial load
duke
parents:
diff changeset
42 void do_thread(Thread* thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
43 int count() { return _count; }
a61af66fc99e Initial load
duke
parents:
diff changeset
44 };
a61af66fc99e Initial load
duke
parents:
diff changeset
45
a61af66fc99e Initial load
duke
parents:
diff changeset
46 void GcThreadCountClosure::do_thread(Thread* thread) {
a61af66fc99e Initial load
duke
parents:
diff changeset
47 _count++;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 }
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50 void MemoryService::set_universe_heap(CollectedHeap* heap) {
a61af66fc99e Initial load
duke
parents:
diff changeset
51 CollectedHeap::Name kind = heap->kind();
a61af66fc99e Initial load
duke
parents:
diff changeset
52 switch (kind) {
a61af66fc99e Initial load
duke
parents:
diff changeset
53 case CollectedHeap::GenCollectedHeap : {
a61af66fc99e Initial load
duke
parents:
diff changeset
54 add_gen_collected_heap_info(GenCollectedHeap::heap());
a61af66fc99e Initial load
duke
parents:
diff changeset
55 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
56 }
a61af66fc99e Initial load
duke
parents:
diff changeset
57 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
58 case CollectedHeap::ParallelScavengeHeap : {
a61af66fc99e Initial load
duke
parents:
diff changeset
59 add_parallel_scavenge_heap_info(ParallelScavengeHeap::heap());
a61af66fc99e Initial load
duke
parents:
diff changeset
60 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
61 }
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 0
diff changeset
62 case CollectedHeap::G1CollectedHeap : {
1089
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
63 add_g1_heap_info(G1CollectedHeap::heap());
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
64 break;
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 0
diff changeset
65 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
66 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
67 default: {
342
37f87013dfd8 6711316: Open source the Garbage-First garbage collector
ysr
parents: 0
diff changeset
68 guarantee(false, "Unrecognized kind of heap");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
69 }
a61af66fc99e Initial load
duke
parents:
diff changeset
70 }
a61af66fc99e Initial load
duke
parents:
diff changeset
71
a61af66fc99e Initial load
duke
parents:
diff changeset
72 // set the GC thread count
a61af66fc99e Initial load
duke
parents:
diff changeset
73 GcThreadCountClosure gctcc;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 heap->gc_threads_do(&gctcc);
a61af66fc99e Initial load
duke
parents:
diff changeset
75 int count = gctcc.count();
a61af66fc99e Initial load
duke
parents:
diff changeset
76 if (count > 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
77 _minor_gc_manager->set_num_gc_threads(count);
a61af66fc99e Initial load
duke
parents:
diff changeset
78 _major_gc_manager->set_num_gc_threads(count);
a61af66fc99e Initial load
duke
parents:
diff changeset
79 }
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 // All memory pools and memory managers are initialized.
a61af66fc99e Initial load
duke
parents:
diff changeset
82 //
a61af66fc99e Initial load
duke
parents:
diff changeset
83 _minor_gc_manager->initialize_gc_stat_info();
a61af66fc99e Initial load
duke
parents:
diff changeset
84 _major_gc_manager->initialize_gc_stat_info();
a61af66fc99e Initial load
duke
parents:
diff changeset
85 }
a61af66fc99e Initial load
duke
parents:
diff changeset
86
a61af66fc99e Initial load
duke
parents:
diff changeset
87 // Add memory pools for GenCollectedHeap
a61af66fc99e Initial load
duke
parents:
diff changeset
88 // This function currently only supports two generations collected heap.
a61af66fc99e Initial load
duke
parents:
diff changeset
89 // The collector for GenCollectedHeap will have two memory managers.
a61af66fc99e Initial load
duke
parents:
diff changeset
90 void MemoryService::add_gen_collected_heap_info(GenCollectedHeap* heap) {
a61af66fc99e Initial load
duke
parents:
diff changeset
91 CollectorPolicy* policy = heap->collector_policy();
a61af66fc99e Initial load
duke
parents:
diff changeset
92
a61af66fc99e Initial load
duke
parents:
diff changeset
93 assert(policy->is_two_generation_policy(), "Only support two generations");
a61af66fc99e Initial load
duke
parents:
diff changeset
94 guarantee(heap->n_gens() == 2, "Only support two-generation heap");
a61af66fc99e Initial load
duke
parents:
diff changeset
95
a61af66fc99e Initial load
duke
parents:
diff changeset
96 TwoGenerationCollectorPolicy* two_gen_policy = policy->as_two_generation_policy();
a61af66fc99e Initial load
duke
parents:
diff changeset
97 if (two_gen_policy != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
98 GenerationSpec** specs = two_gen_policy->generations();
a61af66fc99e Initial load
duke
parents:
diff changeset
99 Generation::Name kind = specs[0]->name();
a61af66fc99e Initial load
duke
parents:
diff changeset
100 switch (kind) {
a61af66fc99e Initial load
duke
parents:
diff changeset
101 case Generation::DefNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
102 _minor_gc_manager = MemoryManager::get_copy_memory_manager();
a61af66fc99e Initial load
duke
parents:
diff changeset
103 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
104 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
105 case Generation::ParNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
106 case Generation::ASParNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
107 _minor_gc_manager = MemoryManager::get_parnew_memory_manager();
a61af66fc99e Initial load
duke
parents:
diff changeset
108 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
109 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
110 default:
a61af66fc99e Initial load
duke
parents:
diff changeset
111 guarantee(false, "Unrecognized generation spec");
a61af66fc99e Initial load
duke
parents:
diff changeset
112 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
113 }
a61af66fc99e Initial load
duke
parents:
diff changeset
114 if (policy->is_mark_sweep_policy()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
115 _major_gc_manager = MemoryManager::get_msc_memory_manager();
a61af66fc99e Initial load
duke
parents:
diff changeset
116 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
117 } else if (policy->is_concurrent_mark_sweep_policy()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
118 _major_gc_manager = MemoryManager::get_cms_memory_manager();
a61af66fc99e Initial load
duke
parents:
diff changeset
119 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
120 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
121 guarantee(false, "Unknown two-gen policy");
a61af66fc99e Initial load
duke
parents:
diff changeset
122 }
a61af66fc99e Initial load
duke
parents:
diff changeset
123 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
124 guarantee(false, "Non two-gen policy");
a61af66fc99e Initial load
duke
parents:
diff changeset
125 }
a61af66fc99e Initial load
duke
parents:
diff changeset
126 _managers_list->append(_minor_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
127 _managers_list->append(_major_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
128
a61af66fc99e Initial load
duke
parents:
diff changeset
129 add_generation_memory_pool(heap->get_gen(minor), _major_gc_manager, _minor_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
130 add_generation_memory_pool(heap->get_gen(major), _major_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
131
a61af66fc99e Initial load
duke
parents:
diff changeset
132 PermGen::Name name = policy->permanent_generation()->name();
a61af66fc99e Initial load
duke
parents:
diff changeset
133 switch (name) {
a61af66fc99e Initial load
duke
parents:
diff changeset
134 case PermGen::MarkSweepCompact: {
a61af66fc99e Initial load
duke
parents:
diff changeset
135 CompactingPermGenGen* perm_gen = (CompactingPermGenGen*) heap->perm_gen();
a61af66fc99e Initial load
duke
parents:
diff changeset
136 add_compact_perm_gen_memory_pool(perm_gen, _major_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
137 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
138 }
a61af66fc99e Initial load
duke
parents:
diff changeset
139 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
140 case PermGen::ConcurrentMarkSweep: {
a61af66fc99e Initial load
duke
parents:
diff changeset
141 CMSPermGenGen* cms_gen = (CMSPermGenGen*) heap->perm_gen();
a61af66fc99e Initial load
duke
parents:
diff changeset
142 add_cms_perm_gen_memory_pool(cms_gen, _major_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
143 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
145 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
146 default:
a61af66fc99e Initial load
duke
parents:
diff changeset
147 guarantee(false, "Unrecognized perm generation");
a61af66fc99e Initial load
duke
parents:
diff changeset
148 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
149 }
a61af66fc99e Initial load
duke
parents:
diff changeset
150 }
a61af66fc99e Initial load
duke
parents:
diff changeset
151
a61af66fc99e Initial load
duke
parents:
diff changeset
152 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
153 // Add memory pools for ParallelScavengeHeap
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // This function currently only supports two generations collected heap.
a61af66fc99e Initial load
duke
parents:
diff changeset
155 // The collector for ParallelScavengeHeap will have two memory managers.
a61af66fc99e Initial load
duke
parents:
diff changeset
156 void MemoryService::add_parallel_scavenge_heap_info(ParallelScavengeHeap* heap) {
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // Two managers to keep statistics about _minor_gc_manager and _major_gc_manager GC.
a61af66fc99e Initial load
duke
parents:
diff changeset
158 _minor_gc_manager = MemoryManager::get_psScavenge_memory_manager();
a61af66fc99e Initial load
duke
parents:
diff changeset
159 _major_gc_manager = MemoryManager::get_psMarkSweep_memory_manager();
a61af66fc99e Initial load
duke
parents:
diff changeset
160 _managers_list->append(_minor_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
161 _managers_list->append(_major_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
162
a61af66fc99e Initial load
duke
parents:
diff changeset
163 add_psYoung_memory_pool(heap->young_gen(), _major_gc_manager, _minor_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
164 add_psOld_memory_pool(heap->old_gen(), _major_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
165 add_psPerm_memory_pool(heap->perm_gen(), _major_gc_manager);
a61af66fc99e Initial load
duke
parents:
diff changeset
166 }
1089
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
167
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
168 void MemoryService::add_g1_heap_info(G1CollectedHeap* g1h) {
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
169 assert(UseG1GC, "sanity");
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
170
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
171 _minor_gc_manager = MemoryManager::get_g1YoungGen_memory_manager();
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
172 _major_gc_manager = MemoryManager::get_g1OldGen_memory_manager();
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
173 _managers_list->append(_minor_gc_manager);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
174 _managers_list->append(_major_gc_manager);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
175
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
176 add_g1YoungGen_memory_pool(g1h, _major_gc_manager, _minor_gc_manager);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
177 add_g1OldGen_memory_pool(g1h, _major_gc_manager);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
178 add_g1PermGen_memory_pool(g1h, _major_gc_manager);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
179 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
180 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
181
a61af66fc99e Initial load
duke
parents:
diff changeset
182 MemoryPool* MemoryService::add_gen(Generation* gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
183 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
184 bool is_heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
185 bool support_usage_threshold) {
a61af66fc99e Initial load
duke
parents:
diff changeset
186
a61af66fc99e Initial load
duke
parents:
diff changeset
187 MemoryPool::PoolType type = (is_heap ? MemoryPool::Heap : MemoryPool::NonHeap);
a61af66fc99e Initial load
duke
parents:
diff changeset
188 GenerationPool* pool = new GenerationPool(gen, name, type, support_usage_threshold);
a61af66fc99e Initial load
duke
parents:
diff changeset
189 _pools_list->append(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
190 return (MemoryPool*) pool;
a61af66fc99e Initial load
duke
parents:
diff changeset
191 }
a61af66fc99e Initial load
duke
parents:
diff changeset
192
a61af66fc99e Initial load
duke
parents:
diff changeset
193 MemoryPool* MemoryService::add_space(ContiguousSpace* space,
a61af66fc99e Initial load
duke
parents:
diff changeset
194 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
195 bool is_heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
196 size_t max_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
197 bool support_usage_threshold) {
a61af66fc99e Initial load
duke
parents:
diff changeset
198 MemoryPool::PoolType type = (is_heap ? MemoryPool::Heap : MemoryPool::NonHeap);
a61af66fc99e Initial load
duke
parents:
diff changeset
199 ContiguousSpacePool* pool = new ContiguousSpacePool(space, name, type, max_size, support_usage_threshold);
a61af66fc99e Initial load
duke
parents:
diff changeset
200
a61af66fc99e Initial load
duke
parents:
diff changeset
201 _pools_list->append(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
202 return (MemoryPool*) pool;
a61af66fc99e Initial load
duke
parents:
diff changeset
203 }
a61af66fc99e Initial load
duke
parents:
diff changeset
204
a61af66fc99e Initial load
duke
parents:
diff changeset
205 MemoryPool* MemoryService::add_survivor_spaces(DefNewGeneration* gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
206 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
207 bool is_heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
208 size_t max_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
209 bool support_usage_threshold) {
a61af66fc99e Initial load
duke
parents:
diff changeset
210 MemoryPool::PoolType type = (is_heap ? MemoryPool::Heap : MemoryPool::NonHeap);
a61af66fc99e Initial load
duke
parents:
diff changeset
211 SurvivorContiguousSpacePool* pool = new SurvivorContiguousSpacePool(gen, name, type, max_size, support_usage_threshold);
a61af66fc99e Initial load
duke
parents:
diff changeset
212
a61af66fc99e Initial load
duke
parents:
diff changeset
213 _pools_list->append(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
214 return (MemoryPool*) pool;
a61af66fc99e Initial load
duke
parents:
diff changeset
215 }
a61af66fc99e Initial load
duke
parents:
diff changeset
216
a61af66fc99e Initial load
duke
parents:
diff changeset
217 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
218 MemoryPool* MemoryService::add_cms_space(CompactibleFreeListSpace* space,
a61af66fc99e Initial load
duke
parents:
diff changeset
219 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
220 bool is_heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
221 size_t max_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
222 bool support_usage_threshold) {
a61af66fc99e Initial load
duke
parents:
diff changeset
223 MemoryPool::PoolType type = (is_heap ? MemoryPool::Heap : MemoryPool::NonHeap);
a61af66fc99e Initial load
duke
parents:
diff changeset
224 CompactibleFreeListSpacePool* pool = new CompactibleFreeListSpacePool(space, name, type, max_size, support_usage_threshold);
a61af66fc99e Initial load
duke
parents:
diff changeset
225 _pools_list->append(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
226 return (MemoryPool*) pool;
a61af66fc99e Initial load
duke
parents:
diff changeset
227 }
a61af66fc99e Initial load
duke
parents:
diff changeset
228 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
229
a61af66fc99e Initial load
duke
parents:
diff changeset
230 // Add memory pool(s) for one generation
a61af66fc99e Initial load
duke
parents:
diff changeset
231 void MemoryService::add_generation_memory_pool(Generation* gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
232 MemoryManager* major_mgr,
a61af66fc99e Initial load
duke
parents:
diff changeset
233 MemoryManager* minor_mgr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
234 Generation::Name kind = gen->kind();
a61af66fc99e Initial load
duke
parents:
diff changeset
235 int index = _pools_list->length();
a61af66fc99e Initial load
duke
parents:
diff changeset
236
a61af66fc99e Initial load
duke
parents:
diff changeset
237 switch (kind) {
a61af66fc99e Initial load
duke
parents:
diff changeset
238 case Generation::DefNew: {
a61af66fc99e Initial load
duke
parents:
diff changeset
239 assert(major_mgr != NULL && minor_mgr != NULL, "Should have two managers");
a61af66fc99e Initial load
duke
parents:
diff changeset
240 DefNewGeneration* young_gen = (DefNewGeneration*) gen;
a61af66fc99e Initial load
duke
parents:
diff changeset
241 // Add a memory pool for each space and young gen doesn't
a61af66fc99e Initial load
duke
parents:
diff changeset
242 // support low memory detection as it is expected to get filled up.
a61af66fc99e Initial load
duke
parents:
diff changeset
243 MemoryPool* eden = add_space(young_gen->eden(),
a61af66fc99e Initial load
duke
parents:
diff changeset
244 "Eden Space",
a61af66fc99e Initial load
duke
parents:
diff changeset
245 true, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
246 young_gen->max_eden_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
247 false /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
248 MemoryPool* survivor = add_survivor_spaces(young_gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
249 "Survivor Space",
a61af66fc99e Initial load
duke
parents:
diff changeset
250 true, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
251 young_gen->max_survivor_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
252 false /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
253 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
254 }
a61af66fc99e Initial load
duke
parents:
diff changeset
255
a61af66fc99e Initial load
duke
parents:
diff changeset
256 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
257 case Generation::ParNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
258 case Generation::ASParNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
259 {
a61af66fc99e Initial load
duke
parents:
diff changeset
260 assert(major_mgr != NULL && minor_mgr != NULL, "Should have two managers");
a61af66fc99e Initial load
duke
parents:
diff changeset
261 // Add a memory pool for each space and young gen doesn't
a61af66fc99e Initial load
duke
parents:
diff changeset
262 // support low memory detection as it is expected to get filled up.
a61af66fc99e Initial load
duke
parents:
diff changeset
263 ParNewGeneration* parnew_gen = (ParNewGeneration*) gen;
a61af66fc99e Initial load
duke
parents:
diff changeset
264 MemoryPool* eden = add_space(parnew_gen->eden(),
a61af66fc99e Initial load
duke
parents:
diff changeset
265 "Par Eden Space",
a61af66fc99e Initial load
duke
parents:
diff changeset
266 true /* is_heap */,
a61af66fc99e Initial load
duke
parents:
diff changeset
267 parnew_gen->max_eden_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
268 false /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
269 MemoryPool* survivor = add_survivor_spaces(parnew_gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
270 "Par Survivor Space",
a61af66fc99e Initial load
duke
parents:
diff changeset
271 true, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
272 parnew_gen->max_survivor_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
273 false /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
274
a61af66fc99e Initial load
duke
parents:
diff changeset
275 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
276 }
a61af66fc99e Initial load
duke
parents:
diff changeset
277 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
278
a61af66fc99e Initial load
duke
parents:
diff changeset
279 case Generation::MarkSweepCompact: {
a61af66fc99e Initial load
duke
parents:
diff changeset
280 assert(major_mgr != NULL && minor_mgr == NULL, "Should have only one manager");
a61af66fc99e Initial load
duke
parents:
diff changeset
281 add_gen(gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
282 "Tenured Gen",
a61af66fc99e Initial load
duke
parents:
diff changeset
283 true, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
284 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
285 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
286 }
a61af66fc99e Initial load
duke
parents:
diff changeset
287
a61af66fc99e Initial load
duke
parents:
diff changeset
288 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
289 case Generation::ConcurrentMarkSweep:
a61af66fc99e Initial load
duke
parents:
diff changeset
290 case Generation::ASConcurrentMarkSweep:
a61af66fc99e Initial load
duke
parents:
diff changeset
291 {
a61af66fc99e Initial load
duke
parents:
diff changeset
292 assert(major_mgr != NULL && minor_mgr == NULL, "Should have only one manager");
a61af66fc99e Initial load
duke
parents:
diff changeset
293 ConcurrentMarkSweepGeneration* cms = (ConcurrentMarkSweepGeneration*) gen;
a61af66fc99e Initial load
duke
parents:
diff changeset
294 MemoryPool* pool = add_cms_space(cms->cmsSpace(),
a61af66fc99e Initial load
duke
parents:
diff changeset
295 "CMS Old Gen",
a61af66fc99e Initial load
duke
parents:
diff changeset
296 true, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
297 cms->reserved().byte_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
298 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
299 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
300 }
a61af66fc99e Initial load
duke
parents:
diff changeset
301 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
302
a61af66fc99e Initial load
duke
parents:
diff changeset
303 default:
a61af66fc99e Initial load
duke
parents:
diff changeset
304 assert(false, "should not reach here");
a61af66fc99e Initial load
duke
parents:
diff changeset
305 // no memory pool added for others
a61af66fc99e Initial load
duke
parents:
diff changeset
306 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
307 }
a61af66fc99e Initial load
duke
parents:
diff changeset
308
a61af66fc99e Initial load
duke
parents:
diff changeset
309 assert(major_mgr != NULL, "Should have at least one manager");
a61af66fc99e Initial load
duke
parents:
diff changeset
310 // Link managers and the memory pools together
a61af66fc99e Initial load
duke
parents:
diff changeset
311 for (int i = index; i < _pools_list->length(); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
312 MemoryPool* pool = _pools_list->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
313 major_mgr->add_pool(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
314 if (minor_mgr != NULL) {
a61af66fc99e Initial load
duke
parents:
diff changeset
315 minor_mgr->add_pool(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
316 }
a61af66fc99e Initial load
duke
parents:
diff changeset
317 }
a61af66fc99e Initial load
duke
parents:
diff changeset
318 }
a61af66fc99e Initial load
duke
parents:
diff changeset
319
a61af66fc99e Initial load
duke
parents:
diff changeset
320 void MemoryService::add_compact_perm_gen_memory_pool(CompactingPermGenGen* perm_gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
321 MemoryManager* mgr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
322 PermanentGenerationSpec* spec = perm_gen->spec();
a61af66fc99e Initial load
duke
parents:
diff changeset
323 size_t max_size = spec->max_size() - spec->read_only_size() - spec->read_write_size();
a61af66fc99e Initial load
duke
parents:
diff changeset
324 MemoryPool* pool = add_space(perm_gen->unshared_space(),
a61af66fc99e Initial load
duke
parents:
diff changeset
325 "Perm Gen",
a61af66fc99e Initial load
duke
parents:
diff changeset
326 false, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
327 max_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
328 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
329 mgr->add_pool(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
330 if (UseSharedSpaces) {
a61af66fc99e Initial load
duke
parents:
diff changeset
331 pool = add_space(perm_gen->ro_space(),
a61af66fc99e Initial load
duke
parents:
diff changeset
332 "Perm Gen [shared-ro]",
a61af66fc99e Initial load
duke
parents:
diff changeset
333 false, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
334 spec->read_only_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
335 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
336 mgr->add_pool(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
337
a61af66fc99e Initial load
duke
parents:
diff changeset
338 pool = add_space(perm_gen->rw_space(),
a61af66fc99e Initial load
duke
parents:
diff changeset
339 "Perm Gen [shared-rw]",
a61af66fc99e Initial load
duke
parents:
diff changeset
340 false, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
341 spec->read_write_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
342 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
343 mgr->add_pool(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
344 }
a61af66fc99e Initial load
duke
parents:
diff changeset
345 }
a61af66fc99e Initial load
duke
parents:
diff changeset
346
a61af66fc99e Initial load
duke
parents:
diff changeset
347 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
348 void MemoryService::add_cms_perm_gen_memory_pool(CMSPermGenGen* cms_gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
349 MemoryManager* mgr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
350
a61af66fc99e Initial load
duke
parents:
diff changeset
351 MemoryPool* pool = add_cms_space(cms_gen->cmsSpace(),
a61af66fc99e Initial load
duke
parents:
diff changeset
352 "CMS Perm Gen",
a61af66fc99e Initial load
duke
parents:
diff changeset
353 false, /* is_heap */
a61af66fc99e Initial load
duke
parents:
diff changeset
354 cms_gen->reserved().byte_size(),
a61af66fc99e Initial load
duke
parents:
diff changeset
355 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
356 mgr->add_pool(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
357 }
a61af66fc99e Initial load
duke
parents:
diff changeset
358
a61af66fc99e Initial load
duke
parents:
diff changeset
359 void MemoryService::add_psYoung_memory_pool(PSYoungGen* gen, MemoryManager* major_mgr, MemoryManager* minor_mgr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
360 assert(major_mgr != NULL && minor_mgr != NULL, "Should have two managers");
a61af66fc99e Initial load
duke
parents:
diff changeset
361
a61af66fc99e Initial load
duke
parents:
diff changeset
362 // Add a memory pool for each space and young gen doesn't
a61af66fc99e Initial load
duke
parents:
diff changeset
363 // support low memory detection as it is expected to get filled up.
a61af66fc99e Initial load
duke
parents:
diff changeset
364 EdenMutableSpacePool* eden = new EdenMutableSpacePool(gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
365 gen->eden_space(),
a61af66fc99e Initial load
duke
parents:
diff changeset
366 "PS Eden Space",
a61af66fc99e Initial load
duke
parents:
diff changeset
367 MemoryPool::Heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
368 false /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
369
a61af66fc99e Initial load
duke
parents:
diff changeset
370 SurvivorMutableSpacePool* survivor = new SurvivorMutableSpacePool(gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
371 "PS Survivor Space",
a61af66fc99e Initial load
duke
parents:
diff changeset
372 MemoryPool::Heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
373 false /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
374
a61af66fc99e Initial load
duke
parents:
diff changeset
375 major_mgr->add_pool(eden);
a61af66fc99e Initial load
duke
parents:
diff changeset
376 major_mgr->add_pool(survivor);
a61af66fc99e Initial load
duke
parents:
diff changeset
377 minor_mgr->add_pool(eden);
a61af66fc99e Initial load
duke
parents:
diff changeset
378 minor_mgr->add_pool(survivor);
a61af66fc99e Initial load
duke
parents:
diff changeset
379 _pools_list->append(eden);
a61af66fc99e Initial load
duke
parents:
diff changeset
380 _pools_list->append(survivor);
a61af66fc99e Initial load
duke
parents:
diff changeset
381 }
a61af66fc99e Initial load
duke
parents:
diff changeset
382
a61af66fc99e Initial load
duke
parents:
diff changeset
383 void MemoryService::add_psOld_memory_pool(PSOldGen* gen, MemoryManager* mgr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
384 PSGenerationPool* old_gen = new PSGenerationPool(gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
385 "PS Old Gen",
a61af66fc99e Initial load
duke
parents:
diff changeset
386 MemoryPool::Heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
387 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
388 mgr->add_pool(old_gen);
a61af66fc99e Initial load
duke
parents:
diff changeset
389 _pools_list->append(old_gen);
a61af66fc99e Initial load
duke
parents:
diff changeset
390 }
a61af66fc99e Initial load
duke
parents:
diff changeset
391
a61af66fc99e Initial load
duke
parents:
diff changeset
392 void MemoryService::add_psPerm_memory_pool(PSPermGen* gen, MemoryManager* mgr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
393 PSGenerationPool* perm_gen = new PSGenerationPool(gen,
a61af66fc99e Initial load
duke
parents:
diff changeset
394 "PS Perm Gen",
a61af66fc99e Initial load
duke
parents:
diff changeset
395 MemoryPool::NonHeap,
a61af66fc99e Initial load
duke
parents:
diff changeset
396 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
397 mgr->add_pool(perm_gen);
a61af66fc99e Initial load
duke
parents:
diff changeset
398 _pools_list->append(perm_gen);
a61af66fc99e Initial load
duke
parents:
diff changeset
399 }
1089
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
400
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
401 void MemoryService::add_g1YoungGen_memory_pool(G1CollectedHeap* g1h,
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
402 MemoryManager* major_mgr,
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
403 MemoryManager* minor_mgr) {
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
404 assert(major_mgr != NULL && minor_mgr != NULL, "should have two managers");
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
405
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
406 G1EdenPool* eden = new G1EdenPool(g1h);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
407 G1SurvivorPool* survivor = new G1SurvivorPool(g1h);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
408
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
409 major_mgr->add_pool(eden);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
410 major_mgr->add_pool(survivor);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
411 minor_mgr->add_pool(eden);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
412 minor_mgr->add_pool(survivor);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
413 _pools_list->append(eden);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
414 _pools_list->append(survivor);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
415 }
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
416
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
417 void MemoryService::add_g1OldGen_memory_pool(G1CollectedHeap* g1h,
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
418 MemoryManager* mgr) {
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
419 assert(mgr != NULL, "should have one manager");
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
420
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
421 G1OldGenPool* old_gen = new G1OldGenPool(g1h);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
422 mgr->add_pool(old_gen);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
423 _pools_list->append(old_gen);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
424 }
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
425
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
426 void MemoryService::add_g1PermGen_memory_pool(G1CollectedHeap* g1h,
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
427 MemoryManager* mgr) {
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
428 assert(mgr != NULL, "should have one manager");
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
429
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
430 CompactingPermGenGen* perm_gen = (CompactingPermGenGen*) g1h->perm_gen();
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
431 PermanentGenerationSpec* spec = perm_gen->spec();
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
432 size_t max_size = spec->max_size() - spec->read_only_size()
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
433 - spec->read_write_size();
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
434 MemoryPool* pool = add_space(perm_gen->unshared_space(),
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
435 "G1 Perm Gen",
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
436 false, /* is_heap */
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
437 max_size,
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
438 true /* support_usage_threshold */);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
439 mgr->add_pool(pool);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
440
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
441 // in case we support CDS in G1
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
442 if (UseSharedSpaces) {
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
443 pool = add_space(perm_gen->ro_space(),
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
444 "G1 Perm Gen [shared-ro]",
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
445 false, /* is_heap */
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
446 spec->read_only_size(),
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
447 true /* support_usage_threshold */);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
448 mgr->add_pool(pool);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
449
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
450 pool = add_space(perm_gen->rw_space(),
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
451 "G1 Perm Gen [shared-rw]",
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
452 false, /* is_heap */
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
453 spec->read_write_size(),
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
454 true /* support_usage_threshold */);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
455 mgr->add_pool(pool);
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
456 }
db0d5eba9d20 6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents: 342
diff changeset
457 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
458 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
459
a61af66fc99e Initial load
duke
parents:
diff changeset
460 void MemoryService::add_code_heap_memory_pool(CodeHeap* heap) {
a61af66fc99e Initial load
duke
parents:
diff changeset
461 _code_heap_pool = new CodeHeapPool(heap,
a61af66fc99e Initial load
duke
parents:
diff changeset
462 "Code Cache",
a61af66fc99e Initial load
duke
parents:
diff changeset
463 true /* support_usage_threshold */);
a61af66fc99e Initial load
duke
parents:
diff changeset
464 MemoryManager* mgr = MemoryManager::get_code_cache_memory_manager();
a61af66fc99e Initial load
duke
parents:
diff changeset
465 mgr->add_pool(_code_heap_pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
466
a61af66fc99e Initial load
duke
parents:
diff changeset
467 _pools_list->append(_code_heap_pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
468 _managers_list->append(mgr);
a61af66fc99e Initial load
duke
parents:
diff changeset
469 }
a61af66fc99e Initial load
duke
parents:
diff changeset
470
a61af66fc99e Initial load
duke
parents:
diff changeset
471 MemoryManager* MemoryService::get_memory_manager(instanceHandle mh) {
a61af66fc99e Initial load
duke
parents:
diff changeset
472 for (int i = 0; i < _managers_list->length(); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
473 MemoryManager* mgr = _managers_list->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
474 if (mgr->is_manager(mh)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
475 return mgr;
a61af66fc99e Initial load
duke
parents:
diff changeset
476 }
a61af66fc99e Initial load
duke
parents:
diff changeset
477 }
a61af66fc99e Initial load
duke
parents:
diff changeset
478 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
479 }
a61af66fc99e Initial load
duke
parents:
diff changeset
480
a61af66fc99e Initial load
duke
parents:
diff changeset
481 MemoryPool* MemoryService::get_memory_pool(instanceHandle ph) {
a61af66fc99e Initial load
duke
parents:
diff changeset
482 for (int i = 0; i < _pools_list->length(); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
483 MemoryPool* pool = _pools_list->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
484 if (pool->is_pool(ph)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
485 return pool;
a61af66fc99e Initial load
duke
parents:
diff changeset
486 }
a61af66fc99e Initial load
duke
parents:
diff changeset
487 }
a61af66fc99e Initial load
duke
parents:
diff changeset
488 return NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
489 }
a61af66fc99e Initial load
duke
parents:
diff changeset
490
a61af66fc99e Initial load
duke
parents:
diff changeset
491 void MemoryService::track_memory_usage() {
a61af66fc99e Initial load
duke
parents:
diff changeset
492 // Track the peak memory usage
a61af66fc99e Initial load
duke
parents:
diff changeset
493 for (int i = 0; i < _pools_list->length(); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
494 MemoryPool* pool = _pools_list->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
495 pool->record_peak_memory_usage();
a61af66fc99e Initial load
duke
parents:
diff changeset
496 }
a61af66fc99e Initial load
duke
parents:
diff changeset
497
a61af66fc99e Initial load
duke
parents:
diff changeset
498 // Detect low memory
a61af66fc99e Initial load
duke
parents:
diff changeset
499 LowMemoryDetector::detect_low_memory();
a61af66fc99e Initial load
duke
parents:
diff changeset
500 }
a61af66fc99e Initial load
duke
parents:
diff changeset
501
a61af66fc99e Initial load
duke
parents:
diff changeset
502 void MemoryService::track_memory_pool_usage(MemoryPool* pool) {
a61af66fc99e Initial load
duke
parents:
diff changeset
503 // Track the peak memory usage
a61af66fc99e Initial load
duke
parents:
diff changeset
504 pool->record_peak_memory_usage();
a61af66fc99e Initial load
duke
parents:
diff changeset
505
a61af66fc99e Initial load
duke
parents:
diff changeset
506 // Detect low memory
a61af66fc99e Initial load
duke
parents:
diff changeset
507 if (LowMemoryDetector::is_enabled(pool)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
508 LowMemoryDetector::detect_low_memory(pool);
a61af66fc99e Initial load
duke
parents:
diff changeset
509 }
a61af66fc99e Initial load
duke
parents:
diff changeset
510 }
a61af66fc99e Initial load
duke
parents:
diff changeset
511
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
512 void MemoryService::gc_begin(bool fullGC, bool recordGCBeginTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
513 bool recordAccumulatedGCTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
514 bool recordPreGCUsage, bool recordPeakUsage) {
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
515
0
a61af66fc99e Initial load
duke
parents:
diff changeset
516 GCMemoryManager* mgr;
a61af66fc99e Initial load
duke
parents:
diff changeset
517 if (fullGC) {
a61af66fc99e Initial load
duke
parents:
diff changeset
518 mgr = _major_gc_manager;
a61af66fc99e Initial load
duke
parents:
diff changeset
519 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
520 mgr = _minor_gc_manager;
a61af66fc99e Initial load
duke
parents:
diff changeset
521 }
a61af66fc99e Initial load
duke
parents:
diff changeset
522 assert(mgr->is_gc_memory_manager(), "Sanity check");
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
523 mgr->gc_begin(recordGCBeginTime, recordPreGCUsage, recordAccumulatedGCTime);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
524
a61af66fc99e Initial load
duke
parents:
diff changeset
525 // Track the peak memory usage when GC begins
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
526 if (recordPeakUsage) {
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
527 for (int i = 0; i < _pools_list->length(); i++) {
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
528 MemoryPool* pool = _pools_list->at(i);
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
529 pool->record_peak_memory_usage();
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
530 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
531 }
a61af66fc99e Initial load
duke
parents:
diff changeset
532 }
a61af66fc99e Initial load
duke
parents:
diff changeset
533
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
534 void MemoryService::gc_end(bool fullGC, bool recordPostGCUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
535 bool recordAccumulatedGCTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
536 bool recordGCEndTime, bool countCollection) {
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
537
0
a61af66fc99e Initial load
duke
parents:
diff changeset
538 GCMemoryManager* mgr;
a61af66fc99e Initial load
duke
parents:
diff changeset
539 if (fullGC) {
a61af66fc99e Initial load
duke
parents:
diff changeset
540 mgr = (GCMemoryManager*) _major_gc_manager;
a61af66fc99e Initial load
duke
parents:
diff changeset
541 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
542 mgr = (GCMemoryManager*) _minor_gc_manager;
a61af66fc99e Initial load
duke
parents:
diff changeset
543 }
a61af66fc99e Initial load
duke
parents:
diff changeset
544 assert(mgr->is_gc_memory_manager(), "Sanity check");
a61af66fc99e Initial load
duke
parents:
diff changeset
545
a61af66fc99e Initial load
duke
parents:
diff changeset
546 // register the GC end statistics and memory usage
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
547 mgr->gc_end(recordPostGCUsage, recordAccumulatedGCTime, recordGCEndTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
548 countCollection);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
549 }
a61af66fc99e Initial load
duke
parents:
diff changeset
550
a61af66fc99e Initial load
duke
parents:
diff changeset
551 void MemoryService::oops_do(OopClosure* f) {
a61af66fc99e Initial load
duke
parents:
diff changeset
552 int i;
a61af66fc99e Initial load
duke
parents:
diff changeset
553
a61af66fc99e Initial load
duke
parents:
diff changeset
554 for (i = 0; i < _pools_list->length(); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
555 MemoryPool* pool = _pools_list->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
556 pool->oops_do(f);
a61af66fc99e Initial load
duke
parents:
diff changeset
557 }
a61af66fc99e Initial load
duke
parents:
diff changeset
558 for (i = 0; i < _managers_list->length(); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
559 MemoryManager* mgr = _managers_list->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
560 mgr->oops_do(f);
a61af66fc99e Initial load
duke
parents:
diff changeset
561 }
a61af66fc99e Initial load
duke
parents:
diff changeset
562 }
a61af66fc99e Initial load
duke
parents:
diff changeset
563
a61af66fc99e Initial load
duke
parents:
diff changeset
564 bool MemoryService::set_verbose(bool verbose) {
a61af66fc99e Initial load
duke
parents:
diff changeset
565 MutexLocker m(Management_lock);
a61af66fc99e Initial load
duke
parents:
diff changeset
566 // verbose will be set to the previous value
a61af66fc99e Initial load
duke
parents:
diff changeset
567 bool succeed = CommandLineFlags::boolAtPut((char*)"PrintGC", &verbose, MANAGEMENT);
a61af66fc99e Initial load
duke
parents:
diff changeset
568 assert(succeed, "Setting PrintGC flag fails");
a61af66fc99e Initial load
duke
parents:
diff changeset
569 ClassLoadingService::reset_trace_class_unloading();
a61af66fc99e Initial load
duke
parents:
diff changeset
570
a61af66fc99e Initial load
duke
parents:
diff changeset
571 return verbose;
a61af66fc99e Initial load
duke
parents:
diff changeset
572 }
a61af66fc99e Initial load
duke
parents:
diff changeset
573
a61af66fc99e Initial load
duke
parents:
diff changeset
574 Handle MemoryService::create_MemoryUsage_obj(MemoryUsage usage, TRAPS) {
a61af66fc99e Initial load
duke
parents:
diff changeset
575 klassOop k = Management::java_lang_management_MemoryUsage_klass(CHECK_NH);
a61af66fc99e Initial load
duke
parents:
diff changeset
576 instanceKlassHandle ik(THREAD, k);
a61af66fc99e Initial load
duke
parents:
diff changeset
577
a61af66fc99e Initial load
duke
parents:
diff changeset
578 instanceHandle obj = ik->allocate_instance_handle(CHECK_NH);
a61af66fc99e Initial load
duke
parents:
diff changeset
579
a61af66fc99e Initial load
duke
parents:
diff changeset
580 JavaValue result(T_VOID);
a61af66fc99e Initial load
duke
parents:
diff changeset
581 JavaCallArguments args(10);
a61af66fc99e Initial load
duke
parents:
diff changeset
582 args.push_oop(obj); // receiver
a61af66fc99e Initial load
duke
parents:
diff changeset
583 args.push_long(usage.init_size_as_jlong()); // Argument 1
a61af66fc99e Initial load
duke
parents:
diff changeset
584 args.push_long(usage.used_as_jlong()); // Argument 2
a61af66fc99e Initial load
duke
parents:
diff changeset
585 args.push_long(usage.committed_as_jlong()); // Argument 3
a61af66fc99e Initial load
duke
parents:
diff changeset
586 args.push_long(usage.max_size_as_jlong()); // Argument 4
a61af66fc99e Initial load
duke
parents:
diff changeset
587
a61af66fc99e Initial load
duke
parents:
diff changeset
588 JavaCalls::call_special(&result,
a61af66fc99e Initial load
duke
parents:
diff changeset
589 ik,
a61af66fc99e Initial load
duke
parents:
diff changeset
590 vmSymbolHandles::object_initializer_name(),
a61af66fc99e Initial load
duke
parents:
diff changeset
591 vmSymbolHandles::long_long_long_long_void_signature(),
a61af66fc99e Initial load
duke
parents:
diff changeset
592 &args,
a61af66fc99e Initial load
duke
parents:
diff changeset
593 CHECK_NH);
a61af66fc99e Initial load
duke
parents:
diff changeset
594 return obj;
a61af66fc99e Initial load
duke
parents:
diff changeset
595 }
a61af66fc99e Initial load
duke
parents:
diff changeset
596 //
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
597 // GC manager type depends on the type of Generation. Depending on the space
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
598 // availablity and vm options the gc uses major gc manager or minor gc
0
a61af66fc99e Initial load
duke
parents:
diff changeset
599 // manager or both. The type of gc manager depends on the generation kind.
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
600 // For DefNew, ParNew and ASParNew generation doing scavenge gc uses minor
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
601 // gc manager (so _fullGC is set to false ) and for other generation kinds
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
602 // doing mark-sweep-compact uses major gc manager (so _fullGC is set
0
a61af66fc99e Initial load
duke
parents:
diff changeset
603 // to true).
a61af66fc99e Initial load
duke
parents:
diff changeset
604 TraceMemoryManagerStats::TraceMemoryManagerStats(Generation::Name kind) {
a61af66fc99e Initial load
duke
parents:
diff changeset
605 switch (kind) {
a61af66fc99e Initial load
duke
parents:
diff changeset
606 case Generation::DefNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
607 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
608 case Generation::ParNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
609 case Generation::ASParNew:
a61af66fc99e Initial load
duke
parents:
diff changeset
610 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
611 _fullGC=false;
a61af66fc99e Initial load
duke
parents:
diff changeset
612 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
613 case Generation::MarkSweepCompact:
a61af66fc99e Initial load
duke
parents:
diff changeset
614 #ifndef SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
615 case Generation::ConcurrentMarkSweep:
a61af66fc99e Initial load
duke
parents:
diff changeset
616 case Generation::ASConcurrentMarkSweep:
a61af66fc99e Initial load
duke
parents:
diff changeset
617 #endif // SERIALGC
a61af66fc99e Initial load
duke
parents:
diff changeset
618 _fullGC=true;
a61af66fc99e Initial load
duke
parents:
diff changeset
619 break;
a61af66fc99e Initial load
duke
parents:
diff changeset
620 default:
a61af66fc99e Initial load
duke
parents:
diff changeset
621 assert(false, "Unrecognized gc generation kind.");
a61af66fc99e Initial load
duke
parents:
diff changeset
622 }
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
623 // this has to be called in a stop the world pause and represent
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
624 // an entire gc pause, start to finish:
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
625 initialize(_fullGC, true, true, true, true, true, true, true);
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
626 }
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
627 TraceMemoryManagerStats::TraceMemoryManagerStats(bool fullGC,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
628 bool recordGCBeginTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
629 bool recordPreGCUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
630 bool recordPeakUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
631 bool recordPostGCUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
632 bool recordAccumulatedGCTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
633 bool recordGCEndTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
634 bool countCollection) {
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
635 initialize(fullGC, recordGCBeginTime, recordPreGCUsage, recordPeakUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
636 recordPostGCUsage, recordAccumulatedGCTime, recordGCEndTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
637 countCollection);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
638 }
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
639
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
640 // for a subclass to create then initialize an instance before invoking
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
641 // the MemoryService
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
642 void TraceMemoryManagerStats::initialize(bool fullGC,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
643 bool recordGCBeginTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
644 bool recordPreGCUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
645 bool recordPeakUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
646 bool recordPostGCUsage,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
647 bool recordAccumulatedGCTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
648 bool recordGCEndTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
649 bool countCollection) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
650 _fullGC = fullGC;
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
651 _recordGCBeginTime = recordGCBeginTime;
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
652 _recordPreGCUsage = recordPreGCUsage;
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
653 _recordPeakUsage = recordPeakUsage;
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
654 _recordPostGCUsage = recordPostGCUsage;
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
655 _recordAccumulatedGCTime = recordAccumulatedGCTime;
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
656 _recordGCEndTime = recordGCEndTime;
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
657 _countCollection = countCollection;
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
658
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
659 MemoryService::gc_begin(_fullGC, _recordGCBeginTime, _recordAccumulatedGCTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
660 _recordPreGCUsage, _recordPeakUsage);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
661 }
a61af66fc99e Initial load
duke
parents:
diff changeset
662
a61af66fc99e Initial load
duke
parents:
diff changeset
663 TraceMemoryManagerStats::~TraceMemoryManagerStats() {
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
664 MemoryService::gc_end(_fullGC, _recordPostGCUsage, _recordAccumulatedGCTime,
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
665 _recordGCEndTime, _countCollection);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
666 }
1703
f6f3eef8a521 6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents: 1552
diff changeset
667