src/share/vm/compiler/compileBroker.hpp
Print this page
@@ -211,12 +211,16 @@
bool is_empty() const { return _first == NULL; }
int size() const { return _size; }
// Redefine Classes support
void mark_on_stack();
-
+ void delete_all();
void print();
+
+ ~CompileQueue() {
+ assert (is_empty(), " Compile Queue must be empty");
+ }
};
// CompileTaskWrapper
//
// Assign this task to the current thread. Deallocate the task
@@ -264,11 +268,11 @@
static CompileQueue* _c2_method_queue;
static CompileQueue* _c1_method_queue;
static CompileTask* _task_free_list;
- static GrowableArray<CompilerThread*>* _method_threads;
+ static GrowableArray<CompilerThread*>* _compiler_threads;
// performance counters
static PerfCounter* _perf_total_compilation;
static PerfCounter* _perf_native_compilation;
static PerfCounter* _perf_osr_compilation;
@@ -309,11 +313,11 @@
static int _sum_standard_bytes_compiled;
static int _sum_nmethod_size;
static int _sum_nmethod_code_size;
static long _peak_compilation_time;
- static CompilerThread* make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, TRAPS);
+ static CompilerThread* make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, AbstractCompiler* comp, TRAPS);
static void init_compiler_threads(int c1_compiler_count, int c2_compiler_count);
static bool compilation_is_complete (methodHandle method, int osr_bci, int comp_level);
static bool compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level);
static uint assign_compile_id (methodHandle method, int osr_bci);
static bool is_compile_blocking (methodHandle method, int osr_bci);
@@ -349,10 +353,12 @@
static CompileQueue* compile_queue(int comp_level) {
if (is_c2_compile(comp_level)) return _c2_method_queue;
if (is_c1_compile(comp_level)) return _c1_method_queue;
return NULL;
}
+ static bool init_compiler_runtime();
+
public:
enum {
// The entry bci used for non-OSR compilations.
standard_entry_bci = InvocationEntryBci
};
@@ -376,13 +382,11 @@
methodHandle hot_method,
int hot_count,
const char* comment, Thread* thread);
static void compiler_thread_loop();
-
static uint get_compilation_id() { return _compilation_id; }
- static bool is_idle();
// Set _should_block.
// Call this from the VM, with Threads_lock held and a safepoint requested.
static void set_should_block();
@@ -390,19 +394,29 @@
static void maybe_block();
enum {
// Flags for toggling compiler activity
stop_compilation = 0,
- run_compilation = 1
+ run_compilation = 1,
+ shutdown_compilaton = 2
};
static bool should_compile_new_jobs() { return UseCompiler && (_should_compile_new_jobs == run_compilation); }
static bool set_should_compile_new_jobs(jint new_state) {
// Return success if the current caller set it
jint old = Atomic::cmpxchg(new_state, &_should_compile_new_jobs, 1-new_state);
return (old == (1-new_state));
}
+
+ static void disable_compilation_forever() {
+ Atomic::xchg(shutdown_compilaton, &_should_compile_new_jobs);
+ // We do not need the compiler objects anymore
+ }
+
+ static bool is_compilation_disabled_forever() {
+ return _should_compile_new_jobs == shutdown_compilaton;
+ }
static void handle_full_code_cache();
// Return total compilation ticks
static jlong total_compilation_ticks() {
return _perf_total_compilation != NULL ? _perf_total_compilation->get_value() : 0;