Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/services/management.hpp
41144 views
1
/*
2
* Copyright (c) 2003, 2021, 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_SERVICES_MANAGEMENT_HPP
26
#define SHARE_SERVICES_MANAGEMENT_HPP
27
28
#include "jmm.h"
29
#include "memory/allocation.hpp"
30
#include "runtime/handles.hpp"
31
#include "runtime/os.hpp"
32
#include "runtime/perfData.hpp"
33
#include "runtime/timer.hpp"
34
35
class OopClosure;
36
class ThreadSnapshot;
37
38
class Management : public AllStatic {
39
private:
40
static PerfVariable* _begin_vm_creation_time;
41
static PerfVariable* _end_vm_creation_time;
42
static PerfVariable* _vm_init_done_time;
43
static jmmOptionalSupport _optional_support;
44
static TimeStamp _stamp; // Timestamp since vm init done time
45
46
// Management klasses
47
static InstanceKlass* _diagnosticCommandImpl_klass;
48
static InstanceKlass* _garbageCollectorExtImpl_klass;
49
static InstanceKlass* _garbageCollectorMXBean_klass;
50
static InstanceKlass* _gcInfo_klass;
51
static InstanceKlass* _managementFactoryHelper_klass;
52
static InstanceKlass* _memoryManagerMXBean_klass;
53
static InstanceKlass* _memoryPoolMXBean_klass;
54
static InstanceKlass* _memoryUsage_klass;
55
static InstanceKlass* _sensor_klass;
56
static InstanceKlass* _threadInfo_klass;
57
static InstanceKlass* load_and_initialize_klass(Symbol* sh, TRAPS);
58
static InstanceKlass* load_and_initialize_klass_or_null(Symbol* sh, TRAPS);
59
static InstanceKlass* initialize_klass(Klass* k, TRAPS);
60
61
public:
62
static void init();
63
static void initialize(TRAPS);
64
65
static jlong ticks_to_ms(jlong ticks) NOT_MANAGEMENT_RETURN_(0L);
66
static jlong timestamp() NOT_MANAGEMENT_RETURN_(0L);
67
68
static void* get_jmm_interface(int version);
69
static void get_optional_support(jmmOptionalSupport* support);
70
71
static void record_vm_startup_time(jlong begin, jlong duration)
72
NOT_MANAGEMENT_RETURN;
73
static void record_vm_init_completed() {
74
// Initialize the timestamp to get the current time
75
_vm_init_done_time->set_value(os::javaTimeMillis());
76
77
// Update the timestamp to the vm init done time
78
_stamp.update();
79
}
80
81
static jlong begin_vm_creation_time() {
82
return _begin_vm_creation_time->get_value();
83
}
84
static jlong vm_init_done_time() {
85
return _vm_init_done_time->get_value();
86
}
87
88
// methods to return a Klass*.
89
static InstanceKlass* java_lang_management_ThreadInfo_klass(TRAPS);
90
static InstanceKlass* java_lang_management_MemoryUsage_klass(TRAPS)
91
NOT_MANAGEMENT_RETURN_(NULL);
92
static InstanceKlass* java_lang_management_MemoryPoolMXBean_klass(TRAPS);
93
static InstanceKlass* java_lang_management_MemoryManagerMXBean_klass(TRAPS);
94
static InstanceKlass* java_lang_management_GarbageCollectorMXBean_klass(TRAPS);
95
static InstanceKlass* sun_management_ManagementFactoryHelper_klass(TRAPS)
96
NOT_MANAGEMENT_RETURN_(NULL);
97
static InstanceKlass* sun_management_Sensor_klass(TRAPS)
98
NOT_MANAGEMENT_RETURN_(NULL);
99
static InstanceKlass* com_sun_management_internal_GarbageCollectorExtImpl_klass(TRAPS)
100
NOT_MANAGEMENT_RETURN_(NULL);
101
static InstanceKlass* com_sun_management_GcInfo_klass(TRAPS)
102
NOT_MANAGEMENT_RETURN_(NULL);
103
static InstanceKlass* com_sun_management_internal_DiagnosticCommandImpl_klass(TRAPS)
104
NOT_MANAGEMENT_RETURN_(NULL);
105
106
static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS);
107
static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, objArrayHandle monitors_array, typeArrayHandle depths_array, objArrayHandle synchronizers_array, TRAPS);
108
};
109
110
class TraceVmCreationTime : public StackObj {
111
private:
112
TimeStamp _timer;
113
jlong _begin_time;
114
115
public:
116
TraceVmCreationTime() {}
117
~TraceVmCreationTime() {}
118
119
void start()
120
{ _timer.update_to(0); _begin_time = os::javaTimeMillis(); }
121
122
jlong begin_time() const {
123
return _begin_time;
124
}
125
126
/**
127
* Only call this if initialization completes successfully; it will
128
* crash if PerfMemory_exit() has already been called (usually by
129
* os::shutdown() when there was an initialization failure).
130
*/
131
void end()
132
{ Management::record_vm_startup_time(_begin_time, _timer.milliseconds()); }
133
134
};
135
136
#endif // SHARE_SERVICES_MANAGEMENT_HPP
137
138