#include "compiler/compilerOracle.hpp" #include "gc_implementation/shared/isGCActiveMark.hpp" #include "memory/resourceArea.hpp" #include "oops/symbol.hpp" #include "runtime/arguments.hpp" #include "runtime/deoptimization.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/sweeper.hpp" #include "runtime/thread.inline.hpp" #include "runtime/vm_operations.hpp" #include "services/threadService.hpp" #define VM_OP_NAME_INITIALIZE(name) #name, const char* VM_Operation::_names[VM_Operation::VMOp_Terminating] = \ { VM_OPS_DO(VM_OP_NAME_INITIALIZE) }; void VM_Operation::set_calling_thread(Thread* thread, ThreadPriority priority) { _calling_thread = thread; assert(MinPriority <= priority && priority <= MaxPriority, "sanity check"); _priority = priority; } void VM_Operation::evaluate() { ResourceMark rm; if (TraceVMOperation) { tty->print("["); NOT_PRODUCT(print();) } doit();
template(HeapWalkOperation) \ template(HeapIterateOperation) \ template(ReportJavaOutOfMemory) \ template(Exit) \ class VM_Operation: public CHeapObj { public: enum Mode { _safepoint, // blocking, safepoint, vm_op C-heap allocated _no_safepoint, // blocking, no safepoint, vm_op C-Heap allocated _concurrent, // non-blocking, no safepoint, vm_op C-Heap allocated _async_safepoint // non-blocking, safepoint, vm_op C-Heap allocated }; enum VMOp_Type { VM_OPS_DO(VM_OP_ENUM) VMOp_Terminating }; private: Thread* _calling_thread; ThreadPriority _priority; long _timestamp; VM_Operation* _next; VM_Operation* _prev; // The VM operation name array static const char* _names[]; public: VM_Operation() { _calling_thread = NULL; _next = NULL; _prev = NULL; }