159 NMT_stack_walkable = true;
160 #endif // INCLUDE_NMT
161
162 // All the flags that get adjusted by VM_Version_init and os::init_2
163 // have been set so dump the flags now.
164 if (PrintFlagsFinal || PrintFlagsRanges) {
165 JVMFlag::printFlags(tty, false, PrintFlagsRanges);
166 }
167
168 return JNI_OK;
169 }
170
171
172 void exit_globals() {
173 static bool destructorsCalled = false;
174 if (!destructorsCalled) {
175 destructorsCalled = true;
176 if (log_is_enabled(Info, monitorinflation)) {
177 // The ObjectMonitor subsystem uses perf counters so
178 // do this before perfMemory_exit().
179 // ObjectSynchronizer::finish_deflate_idle_monitors()'s call
180 // to audit_and_print_stats() is done at the Debug level.
181 ObjectSynchronizer::audit_and_print_stats(true /* on_exit */);
182 }
183 perfMemory_exit();
184 SafepointTracing::statistics_exit_log();
185 if (PrintStringTableStatistics) {
186 SymbolTable::dump(tty);
187 StringTable::dump(tty);
188 }
189 ostream_exit();
190 }
191 }
192
193 static volatile bool _init_completed = false;
194
195 bool is_init_completed() {
196 return Atomic::load_acquire(&_init_completed);
197 }
198
199 void wait_init_completed() {
200 MonitorLocker ml(InitCompleted_lock, Monitor::_no_safepoint_check_flag);
|
159 NMT_stack_walkable = true;
160 #endif // INCLUDE_NMT
161
162 // All the flags that get adjusted by VM_Version_init and os::init_2
163 // have been set so dump the flags now.
164 if (PrintFlagsFinal || PrintFlagsRanges) {
165 JVMFlag::printFlags(tty, false, PrintFlagsRanges);
166 }
167
168 return JNI_OK;
169 }
170
171
172 void exit_globals() {
173 static bool destructorsCalled = false;
174 if (!destructorsCalled) {
175 destructorsCalled = true;
176 if (log_is_enabled(Info, monitorinflation)) {
177 // The ObjectMonitor subsystem uses perf counters so
178 // do this before perfMemory_exit().
179 // These other two audit_and_print_stats() calls are done at the
180 // Debug level at a safepoint:
181 // - for safepoint based deflation auditing:
182 // ObjectSynchronizer::finish_deflate_idle_monitors()
183 // - for async deflation auditing:
184 // ObjectSynchronizer::do_safepoint_work()
185 ObjectSynchronizer::audit_and_print_stats(true /* on_exit */);
186 }
187 perfMemory_exit();
188 SafepointTracing::statistics_exit_log();
189 if (PrintStringTableStatistics) {
190 SymbolTable::dump(tty);
191 StringTable::dump(tty);
192 }
193 ostream_exit();
194 }
195 }
196
197 static volatile bool _init_completed = false;
198
199 bool is_init_completed() {
200 return Atomic::load_acquire(&_init_completed);
201 }
202
203 void wait_init_completed() {
204 MonitorLocker ml(InitCompleted_lock, Monitor::_no_safepoint_check_flag);
|