mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-18 10:04:42 +02:00
8261125: Move VM_Operation to vmOperation.hpp
Reviewed-by: coleenp, stuefe
This commit is contained in:
parent
d547e1a847
commit
fc1d0321dd
23 changed files with 204 additions and 156 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
#include "oops/klass.hpp"
|
#include "oops/klass.hpp"
|
||||||
#include "oops/oop.hpp"
|
#include "oops/oop.hpp"
|
||||||
#include "oops/oopsHierarchy.hpp"
|
#include "oops/oopsHierarchy.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperation.hpp"
|
||||||
#include "services/diagnosticCommand.hpp"
|
#include "services/diagnosticCommand.hpp"
|
||||||
#include "utilities/resourceHash.hpp"
|
#include "utilities/resourceHash.hpp"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -38,6 +38,7 @@
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
#include "runtime/stubRoutines.hpp"
|
#include "runtime/stubRoutines.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
|
|
||||||
DEF_STUB_INTERFACE(ICStub);
|
DEF_STUB_INTERFACE(ICStub);
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
#include "runtime/safepointVerifiers.hpp"
|
#include "runtime/safepointVerifiers.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
#include "runtime/sweeper.hpp"
|
#include "runtime/sweeper.hpp"
|
||||||
|
#include "runtime/threadSMR.hpp"
|
||||||
#include "runtime/timerTrace.hpp"
|
#include "runtime/timerTrace.hpp"
|
||||||
#include "runtime/vframe.inline.hpp"
|
#include "runtime/vframe.inline.hpp"
|
||||||
#include "utilities/debug.hpp"
|
#include "utilities/debug.hpp"
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include "prims/jvmtiExport.hpp"
|
#include "prims/jvmtiExport.hpp"
|
||||||
#include "runtime/handles.hpp"
|
#include "runtime/handles.hpp"
|
||||||
#include "runtime/synchronizer.hpp"
|
#include "runtime/synchronizer.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperation.hpp"
|
||||||
|
|
||||||
// The following class hierarchy represents
|
// The following class hierarchy represents
|
||||||
// a set of operations (VM_Operation) related to GC.
|
// a set of operations (VM_Operation) related to GC.
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "gc/shenandoah/shenandoahPhaseTimings.hpp"
|
#include "gc/shenandoah/shenandoahPhaseTimings.hpp"
|
||||||
#include "runtime/atomic.hpp"
|
#include "runtime/atomic.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
|
#include "runtime/threadSMR.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In normal concurrent cycle, we have to pace the application to let GC finish.
|
* In normal concurrent cycle, we have to pace the application to let GC finish.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2018, 2020 SAP SE. All rights reserved.
|
* Copyright (c) 2018, 2020 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
|
@ -27,6 +27,7 @@
|
||||||
#include "memory/metaspace/metaspaceDCmd.hpp"
|
#include "memory/metaspace/metaspaceDCmd.hpp"
|
||||||
#include "memory/metaspace/metaspaceReporter.hpp"
|
#include "memory/metaspace/metaspaceReporter.hpp"
|
||||||
#include "memory/resourceArea.hpp"
|
#include "memory/resourceArea.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "services/diagnosticCommand.hpp"
|
#include "services/diagnosticCommand.hpp"
|
||||||
#include "services/nmtCommon.hpp"
|
#include "services/nmtCommon.hpp"
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include "runtime/fieldDescriptor.hpp"
|
#include "runtime/fieldDescriptor.hpp"
|
||||||
#include "runtime/frame.hpp"
|
#include "runtime/frame.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperation.hpp"
|
||||||
#include "utilities/growableArray.hpp"
|
#include "utilities/growableArray.hpp"
|
||||||
#include "utilities/macros.hpp"
|
#include "utilities/macros.hpp"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
#include "memory/resourceArea.hpp"
|
#include "memory/resourceArea.hpp"
|
||||||
#include "oops/objArrayKlass.hpp"
|
#include "oops/objArrayKlass.hpp"
|
||||||
#include "oops/objArrayOop.hpp"
|
#include "oops/objArrayOop.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperation.hpp"
|
||||||
|
|
||||||
// Introduction:
|
// Introduction:
|
||||||
//
|
//
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include "prims/jvmtiEventController.hpp"
|
#include "prims/jvmtiEventController.hpp"
|
||||||
#include "prims/jvmtiUtil.hpp"
|
#include "prims/jvmtiUtil.hpp"
|
||||||
#include "runtime/stackValueCollection.hpp"
|
#include "runtime/stackValueCollection.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
#include "runtime/stubRoutines.hpp"
|
#include "runtime/stubRoutines.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "runtime/vm_version.hpp"
|
#include "runtime/vm_version.hpp"
|
||||||
#include "services/threadService.hpp"
|
#include "services/threadService.hpp"
|
||||||
#include "utilities/align.hpp"
|
#include "utilities/align.hpp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -25,6 +25,7 @@
|
||||||
#include "runtime/jniHandles.inline.hpp"
|
#include "runtime/jniHandles.inline.hpp"
|
||||||
#include "runtime/interfaceSupport.inline.hpp"
|
#include "runtime/interfaceSupport.inline.hpp"
|
||||||
#include "code/codeCache.hpp"
|
#include "code/codeCache.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
|
|
||||||
JVM_ENTRY(static jboolean, UH_FreeUpcallStub0(JNIEnv *env, jobject _unused, jlong addr))
|
JVM_ENTRY(static jboolean, UH_FreeUpcallStub0(JNIEnv *env, jobject _unused, jlong addr))
|
||||||
//acquire code cache lock
|
//acquire code cache lock
|
||||||
|
|
|
@ -78,6 +78,7 @@
|
||||||
#include "runtime/vframe.hpp"
|
#include "runtime/vframe.hpp"
|
||||||
#include "runtime/vframeArray.hpp"
|
#include "runtime/vframeArray.hpp"
|
||||||
#include "runtime/vframe_hp.hpp"
|
#include "runtime/vframe_hp.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "utilities/events.hpp"
|
#include "utilities/events.hpp"
|
||||||
#include "utilities/macros.hpp"
|
#include "utilities/macros.hpp"
|
||||||
#include "utilities/preserveException.hpp"
|
#include "utilities/preserveException.hpp"
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "runtime/stackWatermarkSet.hpp"
|
#include "runtime/stackWatermarkSet.hpp"
|
||||||
#include "runtime/task.hpp"
|
#include "runtime/task.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
|
#include "runtime/threadSMR.hpp"
|
||||||
#include "runtime/vmThread.hpp"
|
#include "runtime/vmThread.hpp"
|
||||||
#include "utilities/formatBuffer.hpp"
|
#include "utilities/formatBuffer.hpp"
|
||||||
#include "utilities/filterQueue.inline.hpp"
|
#include "utilities/filterQueue.inline.hpp"
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "runtime/safepointVerifiers.hpp"
|
#include "runtime/safepointVerifiers.hpp"
|
||||||
#include "runtime/vframe.hpp"
|
#include "runtime/vframe.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "runtime/vmThread.hpp"
|
#include "runtime/vmThread.hpp"
|
||||||
#include "utilities/preserveException.hpp"
|
#include "utilities/preserveException.hpp"
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
#include "runtime/stubRoutines.hpp"
|
#include "runtime/stubRoutines.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "runtime/vm_version.hpp"
|
#include "runtime/vm_version.hpp"
|
||||||
#include "services/attachListener.hpp"
|
#include "services/attachListener.hpp"
|
||||||
#include "services/mallocTracker.hpp"
|
#include "services/mallocTracker.hpp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
#include "memory/allocation.hpp"
|
#include "memory/allocation.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperation.hpp"
|
||||||
#include "utilities/ostream.hpp"
|
#include "utilities/ostream.hpp"
|
||||||
#include "utilities/waitBarrier.hpp"
|
#include "utilities/waitBarrier.hpp"
|
||||||
|
|
||||||
|
|
174
src/hotspot/share/runtime/vmOperation.hpp
Normal file
174
src/hotspot/share/runtime/vmOperation.hpp
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHARE_RUNTIME_VMOPERATION_HPP
|
||||||
|
#define SHARE_RUNTIME_VMOPERATION_HPP
|
||||||
|
|
||||||
|
#include "memory/allocation.hpp"
|
||||||
|
|
||||||
|
// The following classes are used for operations
|
||||||
|
// initiated by a Java thread but that must
|
||||||
|
// take place in the VMThread.
|
||||||
|
|
||||||
|
#define VM_OP_ENUM(type) VMOp_##type,
|
||||||
|
|
||||||
|
// Note: When new VM_XXX comes up, add 'XXX' to the template table.
|
||||||
|
#define VM_OPS_DO(template) \
|
||||||
|
template(None) \
|
||||||
|
template(Cleanup) \
|
||||||
|
template(ThreadDump) \
|
||||||
|
template(PrintThreads) \
|
||||||
|
template(FindDeadlocks) \
|
||||||
|
template(ClearICs) \
|
||||||
|
template(ForceSafepoint) \
|
||||||
|
template(ForceAsyncSafepoint) \
|
||||||
|
template(DeoptimizeFrame) \
|
||||||
|
template(DeoptimizeAll) \
|
||||||
|
template(ZombieAll) \
|
||||||
|
template(Verify) \
|
||||||
|
template(PrintJNI) \
|
||||||
|
template(HeapDumper) \
|
||||||
|
template(DeoptimizeTheWorld) \
|
||||||
|
template(CollectForMetadataAllocation) \
|
||||||
|
template(GC_HeapInspection) \
|
||||||
|
template(GenCollectFull) \
|
||||||
|
template(GenCollectFullConcurrent) \
|
||||||
|
template(GenCollectForAllocation) \
|
||||||
|
template(ParallelGCFailedAllocation) \
|
||||||
|
template(ParallelGCSystemGC) \
|
||||||
|
template(G1CollectForAllocation) \
|
||||||
|
template(G1CollectFull) \
|
||||||
|
template(G1Concurrent) \
|
||||||
|
template(G1TryInitiateConcMark) \
|
||||||
|
template(ZMarkStart) \
|
||||||
|
template(ZMarkEnd) \
|
||||||
|
template(ZRelocateStart) \
|
||||||
|
template(ZVerify) \
|
||||||
|
template(HandshakeOneThread) \
|
||||||
|
template(HandshakeAllThreads) \
|
||||||
|
template(HandshakeFallback) \
|
||||||
|
template(EnableBiasedLocking) \
|
||||||
|
template(BulkRevokeBias) \
|
||||||
|
template(PopulateDumpSharedSpace) \
|
||||||
|
template(JNIFunctionTableCopier) \
|
||||||
|
template(RedefineClasses) \
|
||||||
|
template(GetObjectMonitorUsage) \
|
||||||
|
template(GetAllStackTraces) \
|
||||||
|
template(GetThreadListStackTraces) \
|
||||||
|
template(ChangeBreakpoints) \
|
||||||
|
template(GetOrSetLocal) \
|
||||||
|
template(ChangeSingleStep) \
|
||||||
|
template(HeapWalkOperation) \
|
||||||
|
template(HeapIterateOperation) \
|
||||||
|
template(ReportJavaOutOfMemory) \
|
||||||
|
template(JFRCheckpoint) \
|
||||||
|
template(ShenandoahFullGC) \
|
||||||
|
template(ShenandoahInitMark) \
|
||||||
|
template(ShenandoahFinalMarkStartEvac) \
|
||||||
|
template(ShenandoahInitUpdateRefs) \
|
||||||
|
template(ShenandoahFinalUpdateRefs) \
|
||||||
|
template(ShenandoahDegeneratedGC) \
|
||||||
|
template(Exit) \
|
||||||
|
template(LinuxDllLoad) \
|
||||||
|
template(RotateGCLog) \
|
||||||
|
template(WhiteBoxOperation) \
|
||||||
|
template(JVMCIResizeCounters) \
|
||||||
|
template(ClassLoaderStatsOperation) \
|
||||||
|
template(ClassLoaderHierarchyOperation) \
|
||||||
|
template(DumpHashtable) \
|
||||||
|
template(DumpTouchedMethods) \
|
||||||
|
template(CleanClassLoaderDataMetaspaces) \
|
||||||
|
template(PrintCompileQueue) \
|
||||||
|
template(PrintClassHierarchy) \
|
||||||
|
template(ThreadSuspend) \
|
||||||
|
template(ThreadsSuspendJVMTI) \
|
||||||
|
template(ICBufferFull) \
|
||||||
|
template(ScavengeMonitors) \
|
||||||
|
template(PrintMetadata) \
|
||||||
|
template(GTestExecuteAtSafepoint) \
|
||||||
|
template(JFROldObject) \
|
||||||
|
template(JvmtiPostObjectFree)
|
||||||
|
|
||||||
|
class Thread;
|
||||||
|
class outputStream;
|
||||||
|
|
||||||
|
class VM_Operation : public StackObj {
|
||||||
|
public:
|
||||||
|
enum VMOp_Type {
|
||||||
|
VM_OPS_DO(VM_OP_ENUM)
|
||||||
|
VMOp_Terminating
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
Thread* _calling_thread;
|
||||||
|
|
||||||
|
// The VM operation name array
|
||||||
|
static const char* _names[];
|
||||||
|
|
||||||
|
public:
|
||||||
|
VM_Operation() : _calling_thread(NULL) {}
|
||||||
|
|
||||||
|
// VM operation support (used by VM thread)
|
||||||
|
Thread* calling_thread() const { return _calling_thread; }
|
||||||
|
void set_calling_thread(Thread* thread);
|
||||||
|
|
||||||
|
// Called by VM thread - does in turn invoke doit(). Do not override this
|
||||||
|
void evaluate();
|
||||||
|
|
||||||
|
// evaluate() is called by the VMThread and in turn calls doit().
|
||||||
|
// If the thread invoking VMThread::execute((VM_Operation*) is a JavaThread,
|
||||||
|
// doit_prologue() is called in that thread before transferring control to
|
||||||
|
// the VMThread.
|
||||||
|
// If doit_prologue() returns true the VM operation will proceed, and
|
||||||
|
// doit_epilogue() will be called by the JavaThread once the VM operation
|
||||||
|
// completes. If doit_prologue() returns false the VM operation is cancelled.
|
||||||
|
virtual void doit() = 0;
|
||||||
|
virtual bool doit_prologue() { return true; };
|
||||||
|
virtual void doit_epilogue() {};
|
||||||
|
|
||||||
|
// Configuration. Override these appropriately in subclasses.
|
||||||
|
virtual VMOp_Type type() const = 0;
|
||||||
|
virtual bool allow_nested_vm_operations() const { return false; }
|
||||||
|
|
||||||
|
// You may override skip_thread_oop_barriers to return true if the operation
|
||||||
|
// does not access thread-private oops (including frames).
|
||||||
|
virtual bool skip_thread_oop_barriers() const { return false; }
|
||||||
|
|
||||||
|
// An operation can either be done inside a safepoint
|
||||||
|
// or concurrently with Java threads running.
|
||||||
|
virtual bool evaluate_at_safepoint() const { return true; }
|
||||||
|
|
||||||
|
// Debugging
|
||||||
|
virtual void print_on_error(outputStream* st) const;
|
||||||
|
virtual const char* name() const { return _names[type()]; }
|
||||||
|
static const char* name(int type) {
|
||||||
|
assert(type >= 0 && type < VMOp_Terminating, "invalid VM operation type");
|
||||||
|
return _names[type];
|
||||||
|
}
|
||||||
|
#ifndef PRODUCT
|
||||||
|
void print_on(outputStream* st) const { print_on_error(st); }
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SHARE_RUNTIME_VMOPERATION_HPP
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -25,151 +25,12 @@
|
||||||
#ifndef SHARE_RUNTIME_VMOPERATIONS_HPP
|
#ifndef SHARE_RUNTIME_VMOPERATIONS_HPP
|
||||||
#define SHARE_RUNTIME_VMOPERATIONS_HPP
|
#define SHARE_RUNTIME_VMOPERATIONS_HPP
|
||||||
|
|
||||||
#include "memory/allocation.hpp"
|
|
||||||
#include "oops/oop.hpp"
|
#include "oops/oop.hpp"
|
||||||
|
#include "runtime/vmOperation.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
|
|
||||||
// The following classes are used for operations
|
// A hodge podge of commonly used VM Operations
|
||||||
// initiated by a Java thread but that must
|
|
||||||
// take place in the VMThread.
|
|
||||||
|
|
||||||
#define VM_OP_ENUM(type) VMOp_##type,
|
|
||||||
|
|
||||||
// Note: When new VM_XXX comes up, add 'XXX' to the template table.
|
|
||||||
#define VM_OPS_DO(template) \
|
|
||||||
template(None) \
|
|
||||||
template(Cleanup) \
|
|
||||||
template(ThreadDump) \
|
|
||||||
template(PrintThreads) \
|
|
||||||
template(FindDeadlocks) \
|
|
||||||
template(ClearICs) \
|
|
||||||
template(ForceSafepoint) \
|
|
||||||
template(ForceAsyncSafepoint) \
|
|
||||||
template(DeoptimizeFrame) \
|
|
||||||
template(DeoptimizeAll) \
|
|
||||||
template(ZombieAll) \
|
|
||||||
template(Verify) \
|
|
||||||
template(PrintJNI) \
|
|
||||||
template(HeapDumper) \
|
|
||||||
template(DeoptimizeTheWorld) \
|
|
||||||
template(CollectForMetadataAllocation) \
|
|
||||||
template(GC_HeapInspection) \
|
|
||||||
template(GenCollectFull) \
|
|
||||||
template(GenCollectFullConcurrent) \
|
|
||||||
template(GenCollectForAllocation) \
|
|
||||||
template(ParallelGCFailedAllocation) \
|
|
||||||
template(ParallelGCSystemGC) \
|
|
||||||
template(G1CollectForAllocation) \
|
|
||||||
template(G1CollectFull) \
|
|
||||||
template(G1Concurrent) \
|
|
||||||
template(G1TryInitiateConcMark) \
|
|
||||||
template(ZMarkStart) \
|
|
||||||
template(ZMarkEnd) \
|
|
||||||
template(ZRelocateStart) \
|
|
||||||
template(ZVerify) \
|
|
||||||
template(HandshakeOneThread) \
|
|
||||||
template(HandshakeAllThreads) \
|
|
||||||
template(HandshakeFallback) \
|
|
||||||
template(EnableBiasedLocking) \
|
|
||||||
template(BulkRevokeBias) \
|
|
||||||
template(PopulateDumpSharedSpace) \
|
|
||||||
template(JNIFunctionTableCopier) \
|
|
||||||
template(RedefineClasses) \
|
|
||||||
template(GetObjectMonitorUsage) \
|
|
||||||
template(GetAllStackTraces) \
|
|
||||||
template(GetThreadListStackTraces) \
|
|
||||||
template(ChangeBreakpoints) \
|
|
||||||
template(GetOrSetLocal) \
|
|
||||||
template(ChangeSingleStep) \
|
|
||||||
template(HeapWalkOperation) \
|
|
||||||
template(HeapIterateOperation) \
|
|
||||||
template(ReportJavaOutOfMemory) \
|
|
||||||
template(JFRCheckpoint) \
|
|
||||||
template(ShenandoahFullGC) \
|
|
||||||
template(ShenandoahInitMark) \
|
|
||||||
template(ShenandoahFinalMarkStartEvac) \
|
|
||||||
template(ShenandoahInitUpdateRefs) \
|
|
||||||
template(ShenandoahFinalUpdateRefs) \
|
|
||||||
template(ShenandoahDegeneratedGC) \
|
|
||||||
template(Exit) \
|
|
||||||
template(LinuxDllLoad) \
|
|
||||||
template(RotateGCLog) \
|
|
||||||
template(WhiteBoxOperation) \
|
|
||||||
template(JVMCIResizeCounters) \
|
|
||||||
template(ClassLoaderStatsOperation) \
|
|
||||||
template(ClassLoaderHierarchyOperation) \
|
|
||||||
template(DumpHashtable) \
|
|
||||||
template(DumpTouchedMethods) \
|
|
||||||
template(CleanClassLoaderDataMetaspaces) \
|
|
||||||
template(PrintCompileQueue) \
|
|
||||||
template(PrintClassHierarchy) \
|
|
||||||
template(ThreadSuspend) \
|
|
||||||
template(ThreadsSuspendJVMTI) \
|
|
||||||
template(ICBufferFull) \
|
|
||||||
template(ScavengeMonitors) \
|
|
||||||
template(PrintMetadata) \
|
|
||||||
template(GTestExecuteAtSafepoint) \
|
|
||||||
template(JFROldObject) \
|
|
||||||
template(JvmtiPostObjectFree)
|
|
||||||
|
|
||||||
class VM_Operation : public StackObj {
|
|
||||||
public:
|
|
||||||
enum VMOp_Type {
|
|
||||||
VM_OPS_DO(VM_OP_ENUM)
|
|
||||||
VMOp_Terminating
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
Thread* _calling_thread;
|
|
||||||
|
|
||||||
// The VM operation name array
|
|
||||||
static const char* _names[];
|
|
||||||
|
|
||||||
public:
|
|
||||||
VM_Operation() : _calling_thread(NULL) {}
|
|
||||||
|
|
||||||
// VM operation support (used by VM thread)
|
|
||||||
Thread* calling_thread() const { return _calling_thread; }
|
|
||||||
void set_calling_thread(Thread* thread);
|
|
||||||
|
|
||||||
// Called by VM thread - does in turn invoke doit(). Do not override this
|
|
||||||
void evaluate();
|
|
||||||
|
|
||||||
// evaluate() is called by the VMThread and in turn calls doit().
|
|
||||||
// If the thread invoking VMThread::execute((VM_Operation*) is a JavaThread,
|
|
||||||
// doit_prologue() is called in that thread before transferring control to
|
|
||||||
// the VMThread.
|
|
||||||
// If doit_prologue() returns true the VM operation will proceed, and
|
|
||||||
// doit_epilogue() will be called by the JavaThread once the VM operation
|
|
||||||
// completes. If doit_prologue() returns false the VM operation is cancelled.
|
|
||||||
virtual void doit() = 0;
|
|
||||||
virtual bool doit_prologue() { return true; };
|
|
||||||
virtual void doit_epilogue() {};
|
|
||||||
|
|
||||||
// Configuration. Override these appropriately in subclasses.
|
|
||||||
virtual VMOp_Type type() const = 0;
|
|
||||||
virtual bool allow_nested_vm_operations() const { return false; }
|
|
||||||
|
|
||||||
// You may override skip_thread_oop_barriers to return true if the operation
|
|
||||||
// does not access thread-private oops (including frames).
|
|
||||||
virtual bool skip_thread_oop_barriers() const { return false; }
|
|
||||||
|
|
||||||
// An operation can either be done inside a safepoint
|
|
||||||
// or concurrently with Java threads running.
|
|
||||||
virtual bool evaluate_at_safepoint() const { return true; }
|
|
||||||
|
|
||||||
// Debugging
|
|
||||||
virtual void print_on_error(outputStream* st) const;
|
|
||||||
virtual const char* name() const { return _names[type()]; }
|
|
||||||
static const char* name(int type) {
|
|
||||||
assert(type >= 0 && type < VMOp_Terminating, "invalid VM operation type");
|
|
||||||
return _names[type];
|
|
||||||
}
|
|
||||||
#ifndef PRODUCT
|
|
||||||
void print_on(outputStream* st) const { print_on_error(st); }
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
class VM_None: public VM_Operation {
|
class VM_None: public VM_Operation {
|
||||||
const char* _reason;
|
const char* _reason;
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include "runtime/nonJavaThread.hpp"
|
#include "runtime/nonJavaThread.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/task.hpp"
|
#include "runtime/task.hpp"
|
||||||
#include "runtime/vmOperations.hpp"
|
#include "runtime/vmOperation.hpp"
|
||||||
|
|
||||||
// VM operation timeout handling: warn or abort the VM when VM operation takes
|
// VM operation timeout handling: warn or abort the VM when VM operation takes
|
||||||
// too long. Periodic tasks do not participate in safepoint protocol, and therefore
|
// too long. Periodic tasks do not participate in safepoint protocol, and therefore
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "runtime/java.hpp"
|
#include "runtime/java.hpp"
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "services/attachListener.hpp"
|
#include "services/attachListener.hpp"
|
||||||
#include "services/diagnosticCommand.hpp"
|
#include "services/diagnosticCommand.hpp"
|
||||||
#include "services/heapDumper.hpp"
|
#include "services/heapDumper.hpp"
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/jniHandles.hpp"
|
#include "runtime/jniHandles.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "runtime/vm_version.hpp"
|
#include "runtime/vm_version.hpp"
|
||||||
#include "services/diagnosticArgument.hpp"
|
#include "services/diagnosticArgument.hpp"
|
||||||
#include "services/diagnosticCommand.hpp"
|
#include "services/diagnosticCommand.hpp"
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
#include "runtime/thread.inline.hpp"
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "runtime/threadSMR.hpp"
|
#include "runtime/threadSMR.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "services/classLoadingService.hpp"
|
#include "services/classLoadingService.hpp"
|
||||||
#include "services/diagnosticCommand.hpp"
|
#include "services/diagnosticCommand.hpp"
|
||||||
#include "services/diagnosticFramework.hpp"
|
#include "services/diagnosticFramework.hpp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -32,6 +32,7 @@
|
||||||
#include "oops/oop.inline.hpp"
|
#include "oops/oop.inline.hpp"
|
||||||
#include "runtime/deoptimization.hpp"
|
#include "runtime/deoptimization.hpp"
|
||||||
#include "runtime/handles.inline.hpp"
|
#include "runtime/handles.inline.hpp"
|
||||||
|
#include "runtime/vmOperations.hpp"
|
||||||
#include "runtime/vmThread.hpp"
|
#include "runtime/vmThread.hpp"
|
||||||
#include "utilities/vmError.hpp"
|
#include "utilities/vmError.hpp"
|
||||||
#include "utilities/xmlstream.hpp"
|
#include "utilities/xmlstream.hpp"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue