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 #include "precompiled.hpp"
26 #include "classfile/stringTable.hpp"
27 #include "classfile/symbolTable.hpp"
28 #include "code/codeCacheExtensions.hpp"
29 #include "code/icBuffer.hpp"
30 #include "gc/shared/collectedHeap.hpp"
31 #include "interpreter/bytecodes.hpp"
32 #include "memory/universe.hpp"
33 #include "prims/methodHandles.hpp"
34 #include "runtime/globals.hpp"
35 #include "runtime/handles.inline.hpp"
36 #include "runtime/icache.hpp"
37 #include "runtime/init.hpp"
38 #include "runtime/safepoint.hpp"
39 #include "runtime/sharedRuntime.hpp"
40 #include "services/memTracker.hpp"
41 #include "utilities/macros.hpp"
42
43
44 // Initialization done by VM thread in vm_init_globals()
45 void check_ThreadShadow();
46 void eventlog_init();
47 void mutex_init();
48 void chunkpool_init();
88 void ostream_exit();
89
90 void vm_init_globals() {
91 check_ThreadShadow();
92 basic_types_init();
93 eventlog_init();
94 mutex_init();
95 chunkpool_init();
96 perfMemory_init();
97 SuspendibleThreadSet_init();
98 }
99
100
101 jint init_globals() {
102 HandleMark hm;
103 management_init();
104 bytecodes_init();
105 classLoader_init1();
106 compilationPolicy_init();
107 codeCache_init();
108 CodeCacheExtensions::initialize();
109 VM_Version_init();
110 CodeCacheExtensions::complete_step(CodeCacheExtensionsSteps::VMVersion);
111 os_init_globals();
112 stubRoutines_init1();
113 CodeCacheExtensions::complete_step(CodeCacheExtensionsSteps::StubRoutines1);
114 jint status = universe_init(); // dependent on codeCache_init and
115 // stubRoutines_init1 and metaspace_init.
116 if (status != JNI_OK)
117 return status;
118
119 CodeCacheExtensions::complete_step(CodeCacheExtensionsSteps::Universe);
120 interpreter_init(); // before any methods loaded
121 CodeCacheExtensions::complete_step(CodeCacheExtensionsSteps::Interpreter);
122 invocationCounter_init(); // before any methods loaded
123 marksweep_init();
124 accessFlags_init();
125 templateTable_init();
126 InterfaceSupport_init();
127 SharedRuntime::generate_stubs();
128 universe2_init(); // dependent on codeCache_init and stubRoutines_init1
129 referenceProcessor_init();
130 jni_handles_init();
131 #if INCLUDE_VM_STRUCTS
132 vmStructs_init();
133 #endif // INCLUDE_VM_STRUCTS
134
135 vtableStubs_init();
136 InlineCacheBuffer_init();
137 compilerOracle_init();
138 dependencyContext_init();
139
140 if (!compileBroker_init()) {
141 return JNI_EINVAL;
142 }
143 VMRegImpl::set_regName();
144
145 if (!universe_post_init()) {
146 return JNI_ERR;
147 }
148 javaClasses_init(); // must happen after vtable initialization
149 stubRoutines_init2(); // note: StubRoutines need 2-phase init
150 MethodHandles::generate_adapters();
151 CodeCacheExtensions::complete_step(CodeCacheExtensionsSteps::StubRoutines2);
152
153 #if INCLUDE_NMT
154 // Solaris stack is walkable only after stubRoutines are set up.
155 // On Other platforms, the stack is always walkable.
156 NMT_stack_walkable = true;
157 #endif // INCLUDE_NMT
158
159 // All the flags that get adjusted by VM_Version_init and os::init_2
160 // have been set so dump the flags now.
161 if (PrintFlagsFinal || PrintFlagsRanges) {
162 CommandLineFlags::printFlags(tty, false, PrintFlagsRanges);
163 }
164
165 CodeCacheExtensions::complete_step(CodeCacheExtensionsSteps::InitGlobals);
166 return JNI_OK;
167 }
168
169
170 void exit_globals() {
171 static bool destructorsCalled = false;
172 if (!destructorsCalled) {
173 destructorsCalled = true;
174 perfMemory_exit();
175 if (PrintSafepointStatistics) {
176 // Print the collected safepoint statistics.
177 SafepointSynchronize::print_stat_on_exit();
178 }
179 if (PrintStringTableStatistics) {
180 SymbolTable::dump(tty);
181 StringTable::dump(tty);
182 }
183 ostream_exit();
184 }
185 }
|
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 #include "precompiled.hpp"
26 #include "classfile/stringTable.hpp"
27 #include "classfile/symbolTable.hpp"
28 #include "code/icBuffer.hpp"
29 #include "gc/shared/collectedHeap.hpp"
30 #include "interpreter/bytecodes.hpp"
31 #include "memory/universe.hpp"
32 #include "prims/methodHandles.hpp"
33 #include "runtime/globals.hpp"
34 #include "runtime/handles.inline.hpp"
35 #include "runtime/icache.hpp"
36 #include "runtime/init.hpp"
37 #include "runtime/safepoint.hpp"
38 #include "runtime/sharedRuntime.hpp"
39 #include "services/memTracker.hpp"
40 #include "utilities/macros.hpp"
41
42
43 // Initialization done by VM thread in vm_init_globals()
44 void check_ThreadShadow();
45 void eventlog_init();
46 void mutex_init();
47 void chunkpool_init();
87 void ostream_exit();
88
89 void vm_init_globals() {
90 check_ThreadShadow();
91 basic_types_init();
92 eventlog_init();
93 mutex_init();
94 chunkpool_init();
95 perfMemory_init();
96 SuspendibleThreadSet_init();
97 }
98
99
100 jint init_globals() {
101 HandleMark hm;
102 management_init();
103 bytecodes_init();
104 classLoader_init1();
105 compilationPolicy_init();
106 codeCache_init();
107 VM_Version_init();
108 os_init_globals();
109 stubRoutines_init1();
110 jint status = universe_init(); // dependent on codeCache_init and
111 // stubRoutines_init1 and metaspace_init.
112 if (status != JNI_OK)
113 return status;
114
115 interpreter_init(); // before any methods loaded
116 invocationCounter_init(); // before any methods loaded
117 marksweep_init();
118 accessFlags_init();
119 templateTable_init();
120 InterfaceSupport_init();
121 SharedRuntime::generate_stubs();
122 universe2_init(); // dependent on codeCache_init and stubRoutines_init1
123 referenceProcessor_init();
124 jni_handles_init();
125 #if INCLUDE_VM_STRUCTS
126 vmStructs_init();
127 #endif // INCLUDE_VM_STRUCTS
128
129 vtableStubs_init();
130 InlineCacheBuffer_init();
131 compilerOracle_init();
132 dependencyContext_init();
133
134 if (!compileBroker_init()) {
135 return JNI_EINVAL;
136 }
137 VMRegImpl::set_regName();
138
139 if (!universe_post_init()) {
140 return JNI_ERR;
141 }
142 javaClasses_init(); // must happen after vtable initialization
143 stubRoutines_init2(); // note: StubRoutines need 2-phase init
144 MethodHandles::generate_adapters();
145
146 #if INCLUDE_NMT
147 // Solaris stack is walkable only after stubRoutines are set up.
148 // On Other platforms, the stack is always walkable.
149 NMT_stack_walkable = true;
150 #endif // INCLUDE_NMT
151
152 // All the flags that get adjusted by VM_Version_init and os::init_2
153 // have been set so dump the flags now.
154 if (PrintFlagsFinal || PrintFlagsRanges) {
155 CommandLineFlags::printFlags(tty, false, PrintFlagsRanges);
156 }
157
158 return JNI_OK;
159 }
160
161
162 void exit_globals() {
163 static bool destructorsCalled = false;
164 if (!destructorsCalled) {
165 destructorsCalled = true;
166 perfMemory_exit();
167 if (PrintSafepointStatistics) {
168 // Print the collected safepoint statistics.
169 SafepointSynchronize::print_stat_on_exit();
170 }
171 if (PrintStringTableStatistics) {
172 SymbolTable::dump(tty);
173 StringTable::dump(tty);
174 }
175 ostream_exit();
176 }
177 }
|