294 295 296 class VM_ZombieAll: public VM_Operation { 297 public: 298 VM_ZombieAll() {} 299 VMOp_Type type() const { return VMOp_ZombieAll; } 300 void doit(); 301 bool allow_nested_vm_operations() const { return true; } 302 }; 303 #endif // PRODUCT 304 305 class VM_UnlinkSymbols: public VM_Operation { 306 public: 307 VM_UnlinkSymbols() {} 308 VMOp_Type type() const { return VMOp_UnlinkSymbols; } 309 void doit(); 310 bool allow_nested_vm_operations() const { return true; } 311 }; 312 313 class VM_Verify: public VM_Operation { 314 private: 315 bool _silent; 316 public: 317 VM_Verify(bool silent = VerifySilently) : _silent(silent) {} 318 VMOp_Type type() const { return VMOp_Verify; } 319 void doit(); 320 }; 321 322 323 class VM_PrintThreads: public VM_Operation { 324 private: 325 outputStream* _out; 326 bool _print_concurrent_locks; 327 public: 328 VM_PrintThreads() { _out = tty; _print_concurrent_locks = PrintConcurrentLocks; } 329 VM_PrintThreads(outputStream* out, bool print_concurrent_locks) { _out = out; _print_concurrent_locks = print_concurrent_locks; } 330 VMOp_Type type() const { return VMOp_PrintThreads; } 331 void doit(); 332 bool doit_prologue(); 333 void doit_epilogue(); 334 }; 335 336 class VM_PrintJNI: public VM_Operation { 337 private: 399 class VM_Exit: public VM_Operation { 400 private: 401 int _exit_code; 402 static volatile bool _vm_exited; 403 static Thread * _shutdown_thread; 404 static void wait_if_vm_exited(); 405 public: 406 VM_Exit(int exit_code) { 407 _exit_code = exit_code; 408 } 409 static int wait_for_threads_in_native_to_block(); 410 static int set_vm_exited(); 411 static bool vm_exited() { return _vm_exited; } 412 static void block_if_vm_exited() { 413 if (_vm_exited) { 414 wait_if_vm_exited(); 415 } 416 } 417 VMOp_Type type() const { return VMOp_Exit; } 418 void doit(); 419 }; 420 421 422 class VM_RotateGCLog: public VM_Operation { 423 private: 424 outputStream* _out; 425 426 public: 427 VM_RotateGCLog(outputStream* st) : _out(st) {} 428 VMOp_Type type() const { return VMOp_RotateGCLog; } 429 void doit() { gclog_or_tty->rotate_log(true, _out); } 430 }; 431 432 class VM_PrintCompileQueue: public VM_Operation { 433 private: 434 outputStream* _out; 435 436 public: 437 VM_PrintCompileQueue(outputStream* st) : _out(st) {} 438 VMOp_Type type() const { return VMOp_PrintCompileQueue; } 439 Mode evaluation_mode() const { return _no_safepoint; } 440 void doit(); 441 }; 442 443 class VM_PrintCodeList: public VM_Operation { 444 private: 445 outputStream* _out; 446 447 public: 448 VM_PrintCodeList(outputStream* st) : _out(st) {} 449 VMOp_Type type() const { return VMOp_PrintCodeList; } | 294 295 296 class VM_ZombieAll: public VM_Operation { 297 public: 298 VM_ZombieAll() {} 299 VMOp_Type type() const { return VMOp_ZombieAll; } 300 void doit(); 301 bool allow_nested_vm_operations() const { return true; } 302 }; 303 #endif // PRODUCT 304 305 class VM_UnlinkSymbols: public VM_Operation { 306 public: 307 VM_UnlinkSymbols() {} 308 VMOp_Type type() const { return VMOp_UnlinkSymbols; } 309 void doit(); 310 bool allow_nested_vm_operations() const { return true; } 311 }; 312 313 class VM_Verify: public VM_Operation { 314 public: 315 VMOp_Type type() const { return VMOp_Verify; } 316 void doit(); 317 }; 318 319 320 class VM_PrintThreads: public VM_Operation { 321 private: 322 outputStream* _out; 323 bool _print_concurrent_locks; 324 public: 325 VM_PrintThreads() { _out = tty; _print_concurrent_locks = PrintConcurrentLocks; } 326 VM_PrintThreads(outputStream* out, bool print_concurrent_locks) { _out = out; _print_concurrent_locks = print_concurrent_locks; } 327 VMOp_Type type() const { return VMOp_PrintThreads; } 328 void doit(); 329 bool doit_prologue(); 330 void doit_epilogue(); 331 }; 332 333 class VM_PrintJNI: public VM_Operation { 334 private: 396 class VM_Exit: public VM_Operation { 397 private: 398 int _exit_code; 399 static volatile bool _vm_exited; 400 static Thread * _shutdown_thread; 401 static void wait_if_vm_exited(); 402 public: 403 VM_Exit(int exit_code) { 404 _exit_code = exit_code; 405 } 406 static int wait_for_threads_in_native_to_block(); 407 static int set_vm_exited(); 408 static bool vm_exited() { return _vm_exited; } 409 static void block_if_vm_exited() { 410 if (_vm_exited) { 411 wait_if_vm_exited(); 412 } 413 } 414 VMOp_Type type() const { return VMOp_Exit; } 415 void doit(); 416 }; 417 418 class VM_PrintCompileQueue: public VM_Operation { 419 private: 420 outputStream* _out; 421 422 public: 423 VM_PrintCompileQueue(outputStream* st) : _out(st) {} 424 VMOp_Type type() const { return VMOp_PrintCompileQueue; } 425 Mode evaluation_mode() const { return _no_safepoint; } 426 void doit(); 427 }; 428 429 class VM_PrintCodeList: public VM_Operation { 430 private: 431 outputStream* _out; 432 433 public: 434 VM_PrintCodeList(outputStream* st) : _out(st) {} 435 VMOp_Type type() const { return VMOp_PrintCodeList; } |