8150839: Adjust the number of compiler threads for 32-bit platforms
authorzmajo
Fri, 04 Mar 2016 08:53:59 +0100
changeset 36556 7f092a7ce938
parent 36555 4f37fd7a5a09
child 36558 d55cd2e4a39c
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
hotspot/src/share/vm/runtime/advancedThresholdPolicy.cpp
hotspot/src/share/vm/runtime/arguments.cpp
hotspot/src/share/vm/runtime/simpleThresholdPolicy.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));
--- 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());