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
--- 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));
--- 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) {
--- 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());