// Per-compiler statistics class CompilerStatistics { friendclass VMStructs;
class Data { friendclass VMStructs; public:
elapsedTimer _time; // time spent compiling int _bytes; // number of bytecodes compiled, including inlined bytecodes int _count; // number of compilations
Data() : _bytes(0), _count(0) {} void update(elapsedTimer time, int bytes) {
_time.add(time);
_bytes += bytes;
_count++;
} void reset() {
_time.reset();
}
};
public:
Data _standard; // stats for non-OSR compilations
Data _osr; // stats for OSR compilations int _nmethods_size; // int _nmethods_code_size;
class AbstractCompiler : public CHeapObj<mtCompiler> { private: volatileint _num_compiler_threads;
protected: volatileint _compiler_state; // Used for tracking global state of compiler runtime initialization enum { uninitialized, initializing, initialized, failed, shut_down };
// This method returns true for the first compiler thread that reaches that methods. // This thread will initialize the compiler runtime. bool should_perform_init();
// This function determines the compiler thread that will perform the // shutdown of the corresponding compiler runtime. bool should_perform_shutdown();
// Name of this compiler virtualconstchar* name() = 0;
// Determine if the current compiler provides an intrinsic // for method 'method'. An intrinsic is available if: // - the intrinsic is enabled (by using the appropriate command-line flag, // the command-line compile ommand, or a compiler directive) // - the platform on which the VM is running supports the intrinsic // (i.e., the platform provides the instructions necessary for the compiler // to generate the intrinsic code). // // The directive provides the compilation context and includes pre-evaluated values // dependent on VM flags, compile commands, and compiler directives. // // Usually, the compilation context is the caller of the method 'method'. // The only case when for a non-recursive method 'method' the compilation context // is not the caller of the 'method' (but it is the method itself) is // java.lang.ref.Reference::get. // For java.lang.ref.Reference::get, the intrinsic version is used // instead of the compiled version so that the value in the referent // field can be registered by the G1 pre-barrier code. The intrinsified // version of Reference::get also adds a memory barrier to prevent // commoning reads from the referent field across safepoint since GC // can change the referent field's value. See Compile::Compile() // in src/share/vm/opto/compile.cpp or // GraphBuilder::GraphBuilder() in src/share/vm/c1/c1_GraphBuilder.cpp // for more details.
// Determines if an intrinsic is supported by the compiler, that is, // the compiler provides the instructions necessary to generate // the intrinsic code for method 'method'. // // The 'is_intrinsic_supported' method is an allow-list, that is, // by default no intrinsics are supported by a compiler except // the ones listed in the method. Overriding methods should conform // to this behavior. virtualbool is_intrinsic_supported(const methodHandle& method) { returnfalse;
}
// Notifies this compiler that the current thread (`current`) is about to stop. // The current thread currently holds the CompileThread_lock. virtualvoid stopping_compiler_thread(CompilerThread* current) { // Do nothing
}
// Notifies this compiler that queue is empty just prior to waiting on // MethodCompileQueue_lock which is held by the current thread (`thread`). virtualvoid on_empty_queue(CompileQueue* queue, CompilerThread* thread) { // Do nothing
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.