Mercurial > hg > truffle
annotate src/share/vm/services/memoryService.hpp @ 8733:9def4075da6d
8008079: G1: Add nextObject routine to CMBitMapRO and replace nextWord
Summary: Update the task local finger to the start of the next object when marking aborts, in order to avoid the redundant scanning of all 0's when the marking task restarts, if otherwise updating to the next word. In addition, reuse the routine nextObject() in routine iterate().
Reviewed-by: johnc, ysr
Contributed-by: tamao <tao.mao@oracle.com>
author | tamao |
---|---|
date | Tue, 05 Mar 2013 15:36:56 -0800 |
parents | da91efe96a93 |
children | dbd5837b342f |
rev | line source |
---|---|
0 | 1 /* |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
3356
diff
changeset
|
2 * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
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 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_SERVICES_MEMORYSERVICE_HPP |
26 #define SHARE_VM_SERVICES_MEMORYSERVICE_HPP | |
27 | |
28 #include "memory/allocation.hpp" | |
29 #include "memory/generation.hpp" | |
30 #include "runtime/handles.hpp" | |
31 #include "services/memoryUsage.hpp" | |
3356
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
32 #include "gc_interface/gcCause.hpp" |
1972 | 33 |
0 | 34 // Forward declaration |
35 class MemoryPool; | |
36 class MemoryManager; | |
37 class GCMemoryManager; | |
38 class CollectedHeap; | |
39 class Generation; | |
40 class DefNewGeneration; | |
41 class PSYoungGen; | |
42 class PSOldGen; | |
43 class CodeHeap; | |
44 class ContiguousSpace; | |
45 class CompactibleFreeListSpace; | |
46 class GenCollectedHeap; | |
47 class ParallelScavengeHeap; | |
1089
db0d5eba9d20
6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents:
0
diff
changeset
|
48 class G1CollectedHeap; |
0 | 49 |
50 // VM Monitoring and Management Support | |
51 | |
52 class MemoryService : public AllStatic { | |
53 private: | |
54 enum { | |
55 init_pools_list_size = 10, | |
56 init_managers_list_size = 5 | |
57 }; | |
58 | |
59 // index for minor and major generations | |
60 enum { | |
61 minor = 0, | |
62 major = 1, | |
63 n_gens = 2 | |
64 }; | |
65 | |
66 static GrowableArray<MemoryPool*>* _pools_list; | |
67 static GrowableArray<MemoryManager*>* _managers_list; | |
68 | |
69 // memory managers for minor and major GC statistics | |
70 static GCMemoryManager* _major_gc_manager; | |
71 static GCMemoryManager* _minor_gc_manager; | |
72 | |
73 // Code heap memory pool | |
74 static MemoryPool* _code_heap_pool; | |
75 | |
76 static void add_generation_memory_pool(Generation* gen, | |
77 MemoryManager* major_mgr, | |
78 MemoryManager* minor_mgr); | |
79 static void add_generation_memory_pool(Generation* gen, | |
80 MemoryManager* major_mgr) { | |
81 add_generation_memory_pool(gen, major_mgr, NULL); | |
82 } | |
83 | |
84 | |
85 static void add_psYoung_memory_pool(PSYoungGen* gen, | |
86 MemoryManager* major_mgr, | |
87 MemoryManager* minor_mgr); | |
88 static void add_psOld_memory_pool(PSOldGen* gen, | |
89 MemoryManager* mgr); | |
90 | |
1089
db0d5eba9d20
6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents:
0
diff
changeset
|
91 static void add_g1YoungGen_memory_pool(G1CollectedHeap* g1h, |
db0d5eba9d20
6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents:
0
diff
changeset
|
92 MemoryManager* major_mgr, |
db0d5eba9d20
6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents:
0
diff
changeset
|
93 MemoryManager* minor_mgr); |
db0d5eba9d20
6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents:
0
diff
changeset
|
94 static void add_g1OldGen_memory_pool(G1CollectedHeap* g1h, |
db0d5eba9d20
6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents:
0
diff
changeset
|
95 MemoryManager* mgr); |
0 | 96 |
97 static MemoryPool* add_space(ContiguousSpace* space, | |
98 const char* name, | |
99 bool is_heap, | |
100 size_t max_size, | |
101 bool support_usage_threshold); | |
102 static MemoryPool* add_survivor_spaces(DefNewGeneration* gen, | |
103 const char* name, | |
104 bool is_heap, | |
105 size_t max_size, | |
106 bool support_usage_threshold); | |
107 static MemoryPool* add_gen(Generation* gen, | |
108 const char* name, | |
109 bool is_heap, | |
110 bool support_usage_threshold); | |
111 static MemoryPool* add_cms_space(CompactibleFreeListSpace* space, | |
112 const char* name, | |
113 bool is_heap, | |
114 size_t max_size, | |
115 bool support_usage_threshold); | |
116 | |
117 static void add_gen_collected_heap_info(GenCollectedHeap* heap); | |
118 static void add_parallel_scavenge_heap_info(ParallelScavengeHeap* heap); | |
1089
db0d5eba9d20
6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC
tonyp
parents:
0
diff
changeset
|
119 static void add_g1_heap_info(G1CollectedHeap* g1h); |
0 | 120 |
121 public: | |
122 static void set_universe_heap(CollectedHeap* heap); | |
123 static void add_code_heap_memory_pool(CodeHeap* heap); | |
124 | |
125 static MemoryPool* get_memory_pool(instanceHandle pool); | |
126 static MemoryManager* get_memory_manager(instanceHandle mgr); | |
127 | |
128 static const int num_memory_pools() { | |
129 return _pools_list->length(); | |
130 } | |
131 static const int num_memory_managers() { | |
132 return _managers_list->length(); | |
133 } | |
134 | |
135 static MemoryPool* get_memory_pool(int index) { | |
136 return _pools_list->at(index); | |
137 } | |
138 | |
139 static MemoryManager* get_memory_manager(int index) { | |
140 return _managers_list->at(index); | |
141 } | |
142 | |
143 static void track_memory_usage(); | |
144 static void track_code_cache_memory_usage() { | |
145 track_memory_pool_usage(_code_heap_pool); | |
146 } | |
147 static void track_memory_pool_usage(MemoryPool* pool); | |
148 | |
1703
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
149 static void 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
|
150 bool recordAccumulatedGCTime, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
151 bool recordPreGCUsage, bool recordPeakUsage); |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
152 static void 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
|
153 bool recordAccumulatedGCTime, |
3356
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
154 bool recordGCEndTime, bool countCollection, |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
155 GCCause::Cause cause); |
1703
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
156 |
0 | 157 |
158 static void oops_do(OopClosure* f); | |
159 | |
160 static bool get_verbose() { return PrintGC; } | |
161 static bool set_verbose(bool verbose); | |
162 | |
163 // Create an instance of java/lang/management/MemoryUsage | |
164 static Handle create_MemoryUsage_obj(MemoryUsage usage, TRAPS); | |
3356
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
165 |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
166 static const GCMemoryManager* get_minor_gc_manager() { |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
167 return _minor_gc_manager; |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
168 } |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
169 |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
170 static const GCMemoryManager* get_major_gc_manager() { |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
171 return _major_gc_manager; |
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
172 } |
0 | 173 }; |
174 | |
175 class TraceMemoryManagerStats : public StackObj { | |
176 private: | |
177 bool _fullGC; | |
1703
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
178 bool _recordGCBeginTime; |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
179 bool _recordPreGCUsage; |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
180 bool _recordPeakUsage; |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
181 bool _recordPostGCUsage; |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
182 bool _recordAccumulatedGCTime; |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
183 bool _recordGCEndTime; |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
184 bool _countCollection; |
3356
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
185 GCCause::Cause _cause; |
0 | 186 public: |
1703
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
187 TraceMemoryManagerStats() {} |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
188 TraceMemoryManagerStats(bool fullGC, |
3356
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
189 GCCause::Cause cause, |
1703
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
190 bool recordGCBeginTime = true, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
191 bool recordPreGCUsage = true, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
192 bool recordPeakUsage = true, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
193 bool recordPostGCUsage = true, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
194 bool recordAccumulatedGCTime = true, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
195 bool recordGCEndTime = true, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
196 bool countCollection = true); |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
197 |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
198 void initialize(bool fullGC, |
3356
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
199 GCCause::Cause cause, |
1703
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
200 bool recordGCBeginTime, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
201 bool recordPreGCUsage, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
202 bool recordPeakUsage, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
203 bool recordPostGCUsage, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
204 bool recordAccumulatedGCTime, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
205 bool recordGCEndTime, |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
206 bool countCollection); |
f6f3eef8a521
6581734: CMS Old Gen's collection usage is zero after GC which is incorrect
kevinw
parents:
1552
diff
changeset
|
207 |
3356
78542e2b5e35
7036199: Adding a notification to the implementation of GarbageCollectorMXBeans
fparain
parents:
1972
diff
changeset
|
208 TraceMemoryManagerStats(Generation::Name kind, GCCause::Cause cause); |
0 | 209 ~TraceMemoryManagerStats(); |
210 }; | |
1972 | 211 |
212 #endif // SHARE_VM_SERVICES_MEMORYSERVICE_HPP |