comparison src/share/vm/compiler/compileBroker.cpp @ 13074:78da3894b86f

8027593: performance drop with constrained codecache starting with hs25 b111 Summary: Fixed proper sweeping of small code cache sizes Reviewed-by: kvn, iveresov
author anoll
date Tue, 12 Nov 2013 09:32:50 +0100
parents a196f1aaec86
children 096c224171c4 7c0122ed05fb da862781b584 5656140324ed
comparison
equal deleted inserted replaced
13073:1dcea64e9f00 13074:78da3894b86f
124 124
125 #endif // ndef DTRACE_ENABLED 125 #endif // ndef DTRACE_ENABLED
126 126
127 bool CompileBroker::_initialized = false; 127 bool CompileBroker::_initialized = false;
128 volatile bool CompileBroker::_should_block = false; 128 volatile bool CompileBroker::_should_block = false;
129 volatile jint CompileBroker::_print_compilation_warning = 0;
129 volatile jint CompileBroker::_should_compile_new_jobs = run_compilation; 130 volatile jint CompileBroker::_should_compile_new_jobs = run_compilation;
130 131
131 // The installed compiler(s) 132 // The installed compiler(s)
132 AbstractCompiler* CompileBroker::_compilers[2]; 133 AbstractCompiler* CompileBroker::_compilers[2];
133 134
2025 vm_exit(0); 2026 vm_exit(0);
2026 } 2027 }
2027 #endif 2028 #endif
2028 } 2029 }
2029 2030
2030 // ------------------------------------------------------------------ 2031 /**
2031 // CompileBroker::handle_full_code_cache 2032 * The CodeCache is full. Print out warning and disable compilation
2032 // 2033 * or try code cache cleaning so compilation can continue later.
2033 // The CodeCache is full. Print out warning and disable compilation or 2034 */
2034 // try code cache cleaning so compilation can continue later.
2035 void CompileBroker::handle_full_code_cache() { 2035 void CompileBroker::handle_full_code_cache() {
2036 UseInterpreter = true; 2036 UseInterpreter = true;
2037 if (UseCompiler || AlwaysCompileLoopMethods ) { 2037 if (UseCompiler || AlwaysCompileLoopMethods ) {
2038 if (xtty != NULL) { 2038 if (xtty != NULL) {
2039 ResourceMark rm; 2039 ResourceMark rm;
2046 xtty->begin_elem("code_cache_full"); 2046 xtty->begin_elem("code_cache_full");
2047 xtty->print(s.as_string()); 2047 xtty->print(s.as_string());
2048 xtty->stamp(); 2048 xtty->stamp();
2049 xtty->end_elem(); 2049 xtty->end_elem();
2050 } 2050 }
2051 warning("CodeCache is full. Compiler has been disabled.");
2052 warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize=");
2053 2051
2054 CodeCache::report_codemem_full(); 2052 CodeCache::report_codemem_full();
2055
2056 2053
2057 #ifndef PRODUCT 2054 #ifndef PRODUCT
2058 if (CompileTheWorld || ExitOnFullCodeCache) { 2055 if (CompileTheWorld || ExitOnFullCodeCache) {
2059 codecache_print(/* detailed= */ true); 2056 codecache_print(/* detailed= */ true);
2060 before_exit(JavaThread::current()); 2057 before_exit(JavaThread::current());
2064 #endif 2061 #endif
2065 if (UseCodeCacheFlushing) { 2062 if (UseCodeCacheFlushing) {
2066 // Since code cache is full, immediately stop new compiles 2063 // Since code cache is full, immediately stop new compiles
2067 if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) { 2064 if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) {
2068 NMethodSweeper::log_sweep("disable_compiler"); 2065 NMethodSweeper::log_sweep("disable_compiler");
2069
2070 // Switch to 'vm_state'. This ensures that possibly_sweep() can be called
2071 // without having to consider the state in which the current thread is.
2072 ThreadInVMfromUnknown in_vm;
2073 NMethodSweeper::possibly_sweep();
2074 } 2066 }
2067 // Switch to 'vm_state'. This ensures that possibly_sweep() can be called
2068 // without having to consider the state in which the current thread is.
2069 ThreadInVMfromUnknown in_vm;
2070 NMethodSweeper::possibly_sweep();
2075 } else { 2071 } else {
2076 disable_compilation_forever(); 2072 disable_compilation_forever();
2077 } 2073 }
2078 } 2074
2079 codecache_print(/* detailed= */ true); 2075 // Print warning only once
2076 if (should_print_compiler_warning()) {
2077 warning("CodeCache is full. Compiler has been disabled.");
2078 warning("Try increasing the code cache size using -XX:ReservedCodeCacheSize=");
2079 codecache_print(/* detailed= */ true);
2080 }
2081 }
2080 } 2082 }
2081 2083
2082 // ------------------------------------------------------------------ 2084 // ------------------------------------------------------------------
2083 // CompileBroker::set_last_compile 2085 // CompileBroker::set_last_compile
2084 // 2086 //