Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/services/memoryService.hpp
32285 views
1
/*
2
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
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
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
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"
32
#include "gc_interface/gcCause.hpp"
33
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;
48
class G1CollectedHeap;
49
class ShenandoahHeap;
50
51
// VM Monitoring and Management Support
52
53
class MemoryService : public AllStatic {
54
private:
55
enum {
56
init_pools_list_size = 10,
57
init_managers_list_size = 5
58
};
59
60
// index for minor and major generations
61
enum {
62
minor = 0,
63
major = 1,
64
n_gens = 2
65
};
66
67
static GrowableArray<MemoryPool*>* _pools_list;
68
static GrowableArray<MemoryManager*>* _managers_list;
69
70
// memory managers for minor and major GC statistics
71
static GCMemoryManager* _major_gc_manager;
72
static GCMemoryManager* _minor_gc_manager;
73
74
// Code heap memory pool
75
static MemoryPool* _code_heap_pool;
76
77
static MemoryPool* _metaspace_pool;
78
static MemoryPool* _compressed_class_pool;
79
80
static void add_generation_memory_pool(Generation* gen,
81
GCMemoryManager* major_mgr,
82
GCMemoryManager* minor_mgr);
83
static void add_generation_memory_pool(Generation* gen,
84
GCMemoryManager* major_mgr) {
85
add_generation_memory_pool(gen, major_mgr, NULL);
86
}
87
88
89
static void add_psYoung_memory_pool(PSYoungGen* gen,
90
GCMemoryManager* major_mgr,
91
GCMemoryManager* minor_mgr);
92
static void add_psOld_memory_pool(PSOldGen* gen,
93
GCMemoryManager* mgr);
94
95
static void add_g1YoungGen_memory_pool(G1CollectedHeap* g1h,
96
GCMemoryManager* major_mgr,
97
GCMemoryManager* minor_mgr);
98
static void add_g1OldGen_memory_pool(G1CollectedHeap* g1h,
99
GCMemoryManager* major_mgr,
100
GCMemoryManager* minor_mgr);
101
102
static MemoryPool* add_space(ContiguousSpace* space,
103
const char* name,
104
bool is_heap,
105
size_t max_size,
106
bool support_usage_threshold);
107
static MemoryPool* add_survivor_spaces(DefNewGeneration* gen,
108
const char* name,
109
bool is_heap,
110
size_t max_size,
111
bool support_usage_threshold);
112
static MemoryPool* add_gen(Generation* gen,
113
const char* name,
114
bool is_heap,
115
bool support_usage_threshold);
116
static MemoryPool* add_cms_space(CompactibleFreeListSpace* space,
117
const char* name,
118
bool is_heap,
119
size_t max_size,
120
bool support_usage_threshold);
121
122
static void add_gen_collected_heap_info(GenCollectedHeap* heap);
123
static void add_parallel_scavenge_heap_info(ParallelScavengeHeap* heap);
124
static void add_g1_heap_info(G1CollectedHeap* g1h);
125
static void add_shenandoah_heap_info(ShenandoahHeap* heap);
126
127
public:
128
static void set_universe_heap(CollectedHeap* heap);
129
static void add_code_heap_memory_pool(CodeHeap* heap);
130
static void add_metaspace_memory_pools();
131
132
static MemoryPool* get_memory_pool(instanceHandle pool);
133
static MemoryManager* get_memory_manager(instanceHandle mgr);
134
135
static const int num_memory_pools() {
136
return _pools_list->length();
137
}
138
static const int num_memory_managers() {
139
return _managers_list->length();
140
}
141
142
static MemoryPool* get_memory_pool(int index) {
143
return _pools_list->at(index);
144
}
145
146
static MemoryManager* get_memory_manager(int index) {
147
return _managers_list->at(index);
148
}
149
150
static void track_memory_usage();
151
static void track_code_cache_memory_usage() {
152
track_memory_pool_usage(_code_heap_pool);
153
}
154
static void track_metaspace_memory_usage() {
155
track_memory_pool_usage(_metaspace_pool);
156
}
157
static void track_compressed_class_memory_usage() {
158
track_memory_pool_usage(_compressed_class_pool);
159
}
160
static void track_memory_pool_usage(MemoryPool* pool);
161
162
static void gc_begin(bool fullGC, bool recordGCBeginTime,
163
bool recordAccumulatedGCTime,
164
bool recordPreGCUsage, bool recordPeakUsage);
165
static void gc_end(bool fullGC, bool recordPostGCUsage,
166
bool recordAccumulatedGCTime,
167
bool recordGCEndTime, bool countCollection,
168
GCCause::Cause cause,
169
bool allMemoryPoolsAffected);
170
171
172
static void oops_do(OopClosure* f);
173
174
static bool get_verbose() { return PrintGC; }
175
static bool set_verbose(bool verbose);
176
177
// Create an instance of java/lang/management/MemoryUsage
178
static Handle create_MemoryUsage_obj(MemoryUsage usage, TRAPS);
179
180
static const GCMemoryManager* get_minor_gc_manager() {
181
return _minor_gc_manager;
182
}
183
184
static const GCMemoryManager* get_major_gc_manager() {
185
return _major_gc_manager;
186
}
187
};
188
189
class TraceMemoryManagerStats : public StackObj {
190
private:
191
bool _fullGC;
192
bool _allMemoryPoolsAffected;
193
bool _recordGCBeginTime;
194
bool _recordPreGCUsage;
195
bool _recordPeakUsage;
196
bool _recordPostGCUsage;
197
bool _recordAccumulatedGCTime;
198
bool _recordGCEndTime;
199
bool _countCollection;
200
GCCause::Cause _cause;
201
public:
202
TraceMemoryManagerStats() {}
203
TraceMemoryManagerStats(bool fullGC,
204
GCCause::Cause cause,
205
bool allMemoryPoolsAffected = true,
206
bool recordGCBeginTime = true,
207
bool recordPreGCUsage = true,
208
bool recordPeakUsage = true,
209
bool recordPostGCUsage = true,
210
bool recordAccumulatedGCTime = true,
211
bool recordGCEndTime = true,
212
bool countCollection = true);
213
214
void initialize(bool fullGC,
215
GCCause::Cause cause,
216
bool allMemoryPoolsAffected,
217
bool recordGCBeginTime,
218
bool recordPreGCUsage,
219
bool recordPeakUsage,
220
bool recordPostGCUsage,
221
bool recordAccumulatedGCTime,
222
bool recordGCEndTime,
223
bool countCollection);
224
225
TraceMemoryManagerStats(Generation::Name kind, GCCause::Cause cause);
226
~TraceMemoryManagerStats();
227
};
228
229
#endif // SHARE_VM_SERVICES_MEMORYSERVICE_HPP
230
231