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