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