--- a/hotspot/src/share/vm/compiler/compileBroker.cpp Tue Sep 16 14:39:11 2014 +0200
+++ b/hotspot/src/share/vm/compiler/compileBroker.cpp Wed Sep 17 08:00:07 2014 +0200
@@ -1747,9 +1747,11 @@
// We need this HandleMark to avoid leaking VM handles.
HandleMark hm(thread);
- if (CodeCache::unallocated_capacity() < CodeCacheMinimumFreeSpace) {
- // the code cache is really full
- handle_full_code_cache();
+ // Check if the CodeCache is full
+ int code_blob_type = 0;
+ if (CodeCache::is_full(&code_blob_type)) {
+ // The CodeHeap for code_blob_type is really full
+ handle_full_code_cache(code_blob_type);
}
CompileTask* task = queue->get();
@@ -2079,7 +2081,7 @@
* 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() {
+void CompileBroker::handle_full_code_cache(int code_blob_type) {
UseInterpreter = true;
if (UseCompiler || AlwaysCompileLoopMethods ) {
if (xtty != NULL) {
@@ -2096,8 +2098,6 @@
xtty->end_elem();
}
- CodeCache::report_codemem_full();
-
#ifndef PRODUCT
if (CompileTheWorld || ExitOnFullCodeCache) {
codecache_print(/* detailed= */ true);
@@ -2119,12 +2119,7 @@
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::report_codemem_full(code_blob_type, should_print_compiler_warning());
}
}