8354727: CompilationPolicy creates too many compiler threads when code cache space is scarce

Co-authored-by: Aleksey Shipilev <shade@openjdk.org>
Reviewed-by: kvn, shade
This commit is contained in:
Manuel Hässig 2025-06-25 13:00:08 +00:00
parent 1fa090524a
commit f2ef809719

View File

@ -571,8 +571,15 @@ void CompilationPolicy::initialize() {
#ifdef COMPILER2
c2_size = C2Compiler::initial_code_buffer_size();
#endif
size_t buffer_size = c1_only ? c1_size : (c1_size/3 + 2*c2_size/3);
size_t max_count = (ReservedCodeCacheSize - (CodeCacheMinimumUseSpace DEBUG_ONLY(* 3))) / buffer_size;
size_t buffer_size = 0;
if (c1_only) {
buffer_size = c1_size;
} else if (c2_only) {
buffer_size = c2_size;
} else {
buffer_size = c1_size / 3 + 2 * c2_size / 3;
}
size_t max_count = (NonNMethodCodeHeapSize - (CodeCacheMinimumUseSpace DEBUG_ONLY(* 3))) / buffer_size;
if ((size_t)count > max_count) {
// Lower the compiler count such that all buffers fit into the code cache
count = MAX2((int)max_count, min_count);
@ -591,7 +598,7 @@ void CompilationPolicy::initialize() {
count = 3;
FLAG_SET_ERGO(CICompilerCount, count);
}
#endif
#endif // _LP64
if (c1_only) {
// No C2 compiler threads are needed