src/share/vm/runtime/advancedThresholdPolicy.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/runtime/advancedThresholdPolicy.cpp	Wed Oct  9 15:17:18 2013
--- new/src/share/vm/runtime/advancedThresholdPolicy.cpp	Wed Oct  9 15:17:17 2013

*** 189,199 **** --- 189,199 ---- } task = next_task; } if (max_task->comp_level() == CompLevel_full_profile && TieredStopAtLevel > CompLevel_full_profile ! && is_method_profiled(max_method) && !CodeCache::is_full(CodeBlobType::MethodProfile)) { max_task->set_comp_level(CompLevel_limited_profile); if (PrintTieredEvents) { print_event(UPDATE_IN_QUEUE, max_method, max_method, max_task->osr_bci(), (CompLevel)max_task->comp_level()); } }
*** 209,219 **** --- 209,219 ---- // Increase C1 compile threshold when the code cache is filled more // than specified by IncreaseFirstTierCompileThresholdAt percentage. // The main intention is to keep enough free space for C2 compiled code // to achieve peak performance if the code cache is under stress. if ((TieredStopAtLevel == CompLevel_full_optimization) && (level != CompLevel_full_optimization)) { ! double current_reverse_free_ratio = CodeCache::reverse_free_ratio(CodeCache::get_code_blob_type(level)); if (current_reverse_free_ratio > _increase_threshold_at_ratio) { k *= exp(current_reverse_free_ratio - _increase_threshold_at_ratio); } } return k;
*** 395,405 **** --- 395,412 ---- } } break; } } return MIN2(next_level, (CompLevel)TieredStopAtLevel); + + next_level = MIN2(next_level, (CompLevel)TieredStopAtLevel); + + if (CodeCache::is_full(CodeCache::get_code_blob_type(next_level))) { + // The CodeHeap for next_level is full, stay at current level + return cur_level; + } + return next_level; } // Determine if a method should be compiled with a normal entry point at a different level. CompLevel AdvancedThresholdPolicy::call_event(Method* method, CompLevel cur_level) { CompLevel osr_level = MIN2((CompLevel) method->highest_osr_comp_level(),

src/share/vm/runtime/advancedThresholdPolicy.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File