6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld
authorkvn
Tue, 26 Jan 2010 08:53:24 -0800
changeset 4736 e091227926da
parent 4735 3d4e4ec0df67
child 4737 046d094a69d8
6919886: Sweep CodeCache more aggressively to reduce its usage for CompileTheWorld Summary: Add safepoint after CompileTheWorldSafepointInterval (100) compilations and do full sweep of CodeCache each time. Reviewed-by: never Contributed-by: eric.caspole@amd.com
hotspot/src/share/vm/classfile/classLoader.cpp
hotspot/src/share/vm/runtime/arguments.cpp
hotspot/src/share/vm/runtime/globals.hpp
--- a/hotspot/src/share/vm/classfile/classLoader.cpp	Wed Jan 20 22:10:33 2010 -0800
+++ b/hotspot/src/share/vm/classfile/classLoader.cpp	Tue Jan 26 08:53:24 2010 -0800
@@ -1249,6 +1249,7 @@
 }
 
 int ClassLoader::_compile_the_world_counter = 0;
+static int _codecache_sweep_counter = 0;
 
 void ClassLoader::compile_the_world_in(char* name, Handle loader, TRAPS) {
   int len = (int)strlen(name);
@@ -1293,6 +1294,13 @@
           for (int n = 0; n < k->methods()->length(); n++) {
             methodHandle m (THREAD, methodOop(k->methods()->obj_at(n)));
             if (CompilationPolicy::canBeCompiled(m)) {
+
+              if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) {
+                // Give sweeper a chance to keep up with CTW
+                VM_ForceSafepoint op;
+                VMThread::execute(&op);
+                _codecache_sweep_counter = 0;
+              }
               // Force compilation
               CompileBroker::compile_method(m, InvocationEntryBci,
                                             methodHandle(), 0, "CTW", THREAD);
--- a/hotspot/src/share/vm/runtime/arguments.cpp	Wed Jan 20 22:10:33 2010 -0800
+++ b/hotspot/src/share/vm/runtime/arguments.cpp	Tue Jan 26 08:53:24 2010 -0800
@@ -2815,6 +2815,15 @@
     DebugNonSafepoints = true;
   }
 
+#ifndef PRODUCT
+  if (CompileTheWorld) {
+    // Force NmethodSweeper to sweep whole CodeCache each time.
+    if (FLAG_IS_DEFAULT(NmethodSweepFraction)) {
+      NmethodSweepFraction = 1;
+    }
+  }
+#endif
+
   if (PrintCommandLineFlags) {
     CommandLineFlags::printSetFlags();
   }
--- a/hotspot/src/share/vm/runtime/globals.hpp	Wed Jan 20 22:10:33 2010 -0800
+++ b/hotspot/src/share/vm/runtime/globals.hpp	Tue Jan 26 08:53:24 2010 -0800
@@ -2447,6 +2447,9 @@
   notproduct(bool, CompileTheWorldIgnoreInitErrors, false,                  \
           "Compile all methods although class initializer failed")          \
                                                                             \
+  notproduct(intx, CompileTheWorldSafepointInterval, 100,                   \
+          "Force a safepoint every n compiles so sweeper can keep up")      \
+                                                                            \
   develop(bool, TraceIterativeGVN, false,                                   \
           "Print progress during Iterative Global Value Numbering")         \
                                                                             \