--- a/hotspot/src/share/vm/compiler/compileBroker.cpp Wed Nov 20 11:08:09 2013 -0800
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Thu Nov 21 12:30:35 2013 -0800
@@ -126,6 +126,7 @@
bool CompileBroker::_initialized = false;
volatile bool CompileBroker::_should_block = false;
+volatile jint CompileBroker::_print_compilation_warning = 0;
volatile jint CompileBroker::_should_compile_new_jobs = run_compilation;
// The installed compiler(s)
@@ -2027,11 +2028,10 @@
#endif
}
-// ------------------------------------------------------------------
-// CompileBroker::handle_full_code_cache
-//
-// The CodeCache is full. Print out warning and disable compilation or
-// try code cache cleaning so compilation can continue later.
+/**
+ * The CodeCache is full. Print out warning and disable compilation
+ * or try code cache cleaning so compilation can continue later.
+ */
void CompileBroker::handle_full_code_cache() {
UseInterpreter = true;
if (UseCompiler || AlwaysCompileLoopMethods ) {
@@ -2048,12 +2048,9 @@
xtty->stamp();
xtty->end_elem();
}
- warning("CodeCache is full. Compiler has been disabled.");
- warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize=");
CodeCache::report_codemem_full();
-
#ifndef PRODUCT
if (CompileTheWorld || ExitOnFullCodeCache) {
codecache_print(/* detailed= */ true);
@@ -2066,17 +2063,22 @@
// Since code cache is full, immediately stop new compiles
if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) {
NMethodSweeper::log_sweep("disable_compiler");
-
- // Switch to 'vm_state'. This ensures that possibly_sweep() can be called
- // without having to consider the state in which the current thread is.
- ThreadInVMfromUnknown in_vm;
- NMethodSweeper::possibly_sweep();
}
+ // Switch to 'vm_state'. This ensures that possibly_sweep() can be called
+ // without having to consider the state in which the current thread is.
+ ThreadInVMfromUnknown in_vm;
+ NMethodSweeper::possibly_sweep();
} else {
disable_compilation_forever();
}
+
+ // Print warning only once
+ if (should_print_compiler_warning()) {
+ warning("CodeCache is full. Compiler has been disabled.");
+ warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize=");
+ codecache_print(/* detailed= */ true);
+ }
}
- codecache_print(/* detailed= */ true);
}
// ------------------------------------------------------------------