# HG changeset patch # User zmajo # Date 1457078039 -3600 # Node ID 7f092a7ce938f9cb09bb918581b99b54b39a952f # Parent 4f37fd7a5a09a9c27448f8bfdb618596ede57f1c 8150839: Adjust the number of compiler threads for 32-bit platforms Summary: Set the number of compiler threads to 3 on 32-bit platforms. Reviewed-by: iveresov diff -r 4f37fd7a5a09 -r 7f092a7ce938 hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp --- a/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp Thu Mar 03 22:02:13 2016 -0800 +++ b/hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp Fri Mar 04 08:53:59 2016 +0100 @@ -42,17 +42,30 @@ } void AdvancedThresholdPolicy::initialize() { + int count = CICompilerCount; +#ifdef _LP64 // Turn on ergonomic compiler count selection if (FLAG_IS_DEFAULT(CICompilerCountPerCPU) && FLAG_IS_DEFAULT(CICompilerCount)) { FLAG_SET_DEFAULT(CICompilerCountPerCPU, true); } - int count = CICompilerCount; if (CICompilerCountPerCPU) { // Simple log n seems to grow too slowly for tiered, try something faster: log n * log log n int log_cpu = log2_intptr(os::active_processor_count()); int loglog_cpu = log2_intptr(MAX2(log_cpu, 1)); count = MAX2(log_cpu * loglog_cpu, 1) * 3 / 2; } +#else + // On 32-bit systems, the number of compiler threads is limited to 3. + // On these systems, the virtual address space available to the JVM + // is usually limited to 2-4 GB (the exact value depends on the platform). + // As the compilers (especially C2) can consume a large amount of + // memory, scaling the number of compiler threads with the number of + // available cores can result in the exhaustion of the address space + /// available to the VM and thus cause the VM to crash. + if (FLAG_IS_DEFAULT(CICompilerCount)) { + count = 3; + } +#endif set_c1_count(MAX2(count / 3, 1)); set_c2_count(MAX2(count - c1_count(), 1)); diff -r 4f37fd7a5a09 -r 7f092a7ce938 hotspot/src/share/vm/runtime/arguments.cpp --- a/hotspot/src/share/vm/runtime/arguments.cpp Thu Mar 03 22:02:13 2016 -0800 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Fri Mar 04 08:53:59 2016 +0100 @@ -2472,9 +2472,11 @@ status = false; } +#ifdef _LP64 if (!FLAG_IS_DEFAULT(CICompilerCount) && !FLAG_IS_DEFAULT(CICompilerCountPerCPU) && CICompilerCountPerCPU) { warning("The VM option CICompilerCountPerCPU overrides CICompilerCount."); } +#endif #ifndef SUPPORT_RESERVED_STACK_AREA if (StackReservedPages != 0) { diff -r 4f37fd7a5a09 -r 7f092a7ce938 hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp --- a/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp Thu Mar 03 22:02:13 2016 -0800 +++ b/hotspot/src/share/vm/runtime/simpleThresholdPolicy.cpp Fri Mar 04 08:53:59 2016 +0100 @@ -138,9 +138,15 @@ FLAG_SET_DEFAULT(CICompilerCount, 3); } int count = CICompilerCount; +#ifdef _LP64 + // On 64-bit systems, scale the number of compiler threads with + // the number of cores available on the system. Scaling is not + // performed on 32-bit systems because it can lead to exhaustion + // of the virtual memory address space available to the JVM. if (CICompilerCountPerCPU) { count = MAX2(log2_intptr(os::active_processor_count()), 1) * 3 / 2; } +#endif set_c1_count(MAX2(count / 3, 1)); set_c2_count(MAX2(count - c1_count(), 1)); FLAG_SET_ERGO(intx, CICompilerCount, c1_count() + c2_count());