hotspot/src/share/vm/runtime/compilationPolicy.cpp
changeset 4750 71fd601907dc
parent 4645 0c5f5b94e93a
child 5547 f4b087cbb361
equal deleted inserted replaced
4749:f26b30116e3a 4750:71fd601907dc
    64 bool CompilationPolicy::mustBeCompiled(methodHandle m) {
    64 bool CompilationPolicy::mustBeCompiled(methodHandle m) {
    65   if (m->has_compiled_code()) return false;       // already compiled
    65   if (m->has_compiled_code()) return false;       // already compiled
    66   if (!canBeCompiled(m))      return false;
    66   if (!canBeCompiled(m))      return false;
    67 
    67 
    68   return !UseInterpreter ||                                              // must compile all methods
    68   return !UseInterpreter ||                                              // must compile all methods
    69          (UseCompiler && AlwaysCompileLoopMethods && m->has_loops()); // eagerly compile loop methods
    69          (UseCompiler && AlwaysCompileLoopMethods && m->has_loops() && CompileBroker::should_compile_new_jobs()); // eagerly compile loop methods
    70 }
    70 }
    71 
    71 
    72 // Returns true if m is allowed to be compiled
    72 // Returns true if m is allowed to be compiled
    73 bool CompilationPolicy::canBeCompiled(methodHandle m) {
    73 bool CompilationPolicy::canBeCompiled(methodHandle m) {
    74   if (m->is_abstract()) return false;
    74   if (m->is_abstract()) return false;
   135 
   135 
   136   int hot_count = m->invocation_count();
   136   int hot_count = m->invocation_count();
   137   reset_counter_for_invocation_event(m);
   137   reset_counter_for_invocation_event(m);
   138   const char* comment = "count";
   138   const char* comment = "count";
   139 
   139 
   140   if (!delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler) {
   140   if (!delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) {
   141     nmethod* nm = m->code();
   141     nmethod* nm = m->code();
   142     if (nm == NULL ) {
   142     if (nm == NULL ) {
   143       const char* comment = "count";
   143       const char* comment = "count";
   144       CompileBroker::compile_method(m, InvocationEntryBci,
   144       CompileBroker::compile_method(m, InvocationEntryBci,
   145                                     m, hot_count, comment, CHECK);
   145                                     m, hot_count, comment, CHECK);
   160   assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
   160   assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
   161 
   161 
   162   int hot_count = m->backedge_count();
   162   int hot_count = m->backedge_count();
   163   const char* comment = "backedge_count";
   163   const char* comment = "backedge_count";
   164 
   164 
   165   if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m)) {
   165   if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) {
   166     CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
   166     CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
   167 
   167 
   168     NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
   168     NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
   169   }
   169   }
   170 }
   170 }
   202 
   202 
   203   int hot_count = m->invocation_count();
   203   int hot_count = m->invocation_count();
   204   reset_counter_for_invocation_event(m);
   204   reset_counter_for_invocation_event(m);
   205   const char* comment = "count";
   205   const char* comment = "count";
   206 
   206 
   207   if (m->code() == NULL && !delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler) {
   207   if (m->code() == NULL && !delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) {
   208     ResourceMark rm(THREAD);
   208     ResourceMark rm(THREAD);
   209     JavaThread *thread = (JavaThread*)THREAD;
   209     JavaThread *thread = (JavaThread*)THREAD;
   210     frame       fr     = thread->last_frame();
   210     frame       fr     = thread->last_frame();
   211     assert(fr.is_interpreted_frame(), "must be interpreted");
   211     assert(fr.is_interpreted_frame(), "must be interpreted");
   212     assert(fr.interpreter_frame_method() == m(), "bad method");
   212     assert(fr.interpreter_frame_method() == m(), "bad method");
   246   assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
   246   assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now.");
   247 
   247 
   248   int hot_count = m->backedge_count();
   248   int hot_count = m->backedge_count();
   249   const char* comment = "backedge_count";
   249   const char* comment = "backedge_count";
   250 
   250 
   251   if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m)) {
   251   if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) {
   252     CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
   252     CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK);
   253 
   253 
   254     NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
   254     NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));)
   255   }
   255   }
   256 }
   256 }