compileBroker.cpp revision 8638:767f36deb0dc
1/*
2 * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#include "precompiled.hpp"
26#include "classfile/systemDictionary.hpp"
27#include "classfile/vmSymbols.hpp"
28#include "code/codeCache.hpp"
29#include "compiler/compileBroker.hpp"
30#include "compiler/compileLog.hpp"
31#include "compiler/compilerOracle.hpp"
32#include "interpreter/linkResolver.hpp"
33#include "memory/allocation.inline.hpp"
34#include "oops/methodData.hpp"
35#include "oops/method.hpp"
36#include "oops/oop.inline.hpp"
37#include "prims/nativeLookup.hpp"
38#include "prims/whitebox.hpp"
39#include "runtime/arguments.hpp"
40#include "runtime/atomic.inline.hpp"
41#include "runtime/compilationPolicy.hpp"
42#include "runtime/init.hpp"
43#include "runtime/interfaceSupport.hpp"
44#include "runtime/javaCalls.hpp"
45#include "runtime/os.hpp"
46#include "runtime/sharedRuntime.hpp"
47#include "runtime/sweeper.hpp"
48#include "trace/tracing.hpp"
49#include "utilities/dtrace.hpp"
50#include "utilities/events.hpp"
51#ifdef COMPILER1
52#include "c1/c1_Compiler.hpp"
53#endif
54#ifdef COMPILER2
55#include "opto/c2compiler.hpp"
56#endif
57#ifdef SHARK
58#include "shark/sharkCompiler.hpp"
59#endif
60
61#ifdef DTRACE_ENABLED
62
63// Only bother with this argument setup if dtrace is available
64
65#define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name)             \
66  {                                                                      \
67    Symbol* klass_name = (method)->klass_name();                         \
68    Symbol* name = (method)->name();                                     \
69    Symbol* signature = (method)->signature();                           \
70    HOTSPOT_METHOD_COMPILE_BEGIN(                                        \
71      (char *) comp_name, strlen(comp_name),                             \
72      (char *) klass_name->bytes(), klass_name->utf8_length(),           \
73      (char *) name->bytes(), name->utf8_length(),                       \
74      (char *) signature->bytes(), signature->utf8_length());            \
75  }
76
77#define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success)      \
78  {                                                                      \
79    Symbol* klass_name = (method)->klass_name();                         \
80    Symbol* name = (method)->name();                                     \
81    Symbol* signature = (method)->signature();                           \
82    HOTSPOT_METHOD_COMPILE_END(                                          \
83      (char *) comp_name, strlen(comp_name),                             \
84      (char *) klass_name->bytes(), klass_name->utf8_length(),           \
85      (char *) name->bytes(), name->utf8_length(),                       \
86      (char *) signature->bytes(), signature->utf8_length(), (success)); \
87  }
88
89#else //  ndef DTRACE_ENABLED
90
91#define DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, comp_name)
92#define DTRACE_METHOD_COMPILE_END_PROBE(method, comp_name, success)
93
94#endif // ndef DTRACE_ENABLED
95
96bool CompileBroker::_initialized = false;
97volatile bool CompileBroker::_should_block = false;
98volatile jint CompileBroker::_print_compilation_warning = 0;
99volatile jint CompileBroker::_should_compile_new_jobs = run_compilation;
100
101// The installed compiler(s)
102AbstractCompiler* CompileBroker::_compilers[2];
103
104// These counters are used to assign an unique ID to each compilation.
105volatile jint CompileBroker::_compilation_id     = 0;
106volatile jint CompileBroker::_osr_compilation_id = 0;
107
108// Debugging information
109int  CompileBroker::_last_compile_type     = no_compile;
110int  CompileBroker::_last_compile_level    = CompLevel_none;
111char CompileBroker::_last_method_compiled[CompileBroker::name_buffer_length];
112
113// Performance counters
114PerfCounter* CompileBroker::_perf_total_compilation = NULL;
115PerfCounter* CompileBroker::_perf_osr_compilation = NULL;
116PerfCounter* CompileBroker::_perf_standard_compilation = NULL;
117
118PerfCounter* CompileBroker::_perf_total_bailout_count = NULL;
119PerfCounter* CompileBroker::_perf_total_invalidated_count = NULL;
120PerfCounter* CompileBroker::_perf_total_compile_count = NULL;
121PerfCounter* CompileBroker::_perf_total_osr_compile_count = NULL;
122PerfCounter* CompileBroker::_perf_total_standard_compile_count = NULL;
123
124PerfCounter* CompileBroker::_perf_sum_osr_bytes_compiled = NULL;
125PerfCounter* CompileBroker::_perf_sum_standard_bytes_compiled = NULL;
126PerfCounter* CompileBroker::_perf_sum_nmethod_size = NULL;
127PerfCounter* CompileBroker::_perf_sum_nmethod_code_size = NULL;
128
129PerfStringVariable* CompileBroker::_perf_last_method = NULL;
130PerfStringVariable* CompileBroker::_perf_last_failed_method = NULL;
131PerfStringVariable* CompileBroker::_perf_last_invalidated_method = NULL;
132PerfVariable*       CompileBroker::_perf_last_compile_type = NULL;
133PerfVariable*       CompileBroker::_perf_last_compile_size = NULL;
134PerfVariable*       CompileBroker::_perf_last_failed_type = NULL;
135PerfVariable*       CompileBroker::_perf_last_invalidated_type = NULL;
136
137// Timers and counters for generating statistics
138elapsedTimer CompileBroker::_t_total_compilation;
139elapsedTimer CompileBroker::_t_osr_compilation;
140elapsedTimer CompileBroker::_t_standard_compilation;
141elapsedTimer CompileBroker::_t_invalidated_compilation;
142elapsedTimer CompileBroker::_t_bailedout_compilation;
143
144int CompileBroker::_total_bailout_count          = 0;
145int CompileBroker::_total_invalidated_count      = 0;
146int CompileBroker::_total_compile_count          = 0;
147int CompileBroker::_total_osr_compile_count      = 0;
148int CompileBroker::_total_standard_compile_count = 0;
149
150int CompileBroker::_sum_osr_bytes_compiled       = 0;
151int CompileBroker::_sum_standard_bytes_compiled  = 0;
152int CompileBroker::_sum_nmethod_size             = 0;
153int CompileBroker::_sum_nmethod_code_size        = 0;
154
155long CompileBroker::_peak_compilation_time       = 0;
156
157CompileQueue* CompileBroker::_c2_compile_queue   = NULL;
158CompileQueue* CompileBroker::_c1_compile_queue   = NULL;
159
160
161class CompilationLog : public StringEventLog {
162 public:
163  CompilationLog() : StringEventLog("Compilation events") {
164  }
165
166  void log_compile(JavaThread* thread, CompileTask* task) {
167    StringLogMessage lm;
168    stringStream sstr = lm.stream();
169    // msg.time_stamp().update_to(tty->time_stamp().ticks());
170    task->print_compilation(&sstr, NULL, true, false);
171    log(thread, "%s", (const char*)lm);
172  }
173
174  void log_nmethod(JavaThread* thread, nmethod* nm) {
175    log(thread, "nmethod %d%s " INTPTR_FORMAT " code [" INTPTR_FORMAT ", " INTPTR_FORMAT "]",
176        nm->compile_id(), nm->is_osr_method() ? "%" : "",
177        p2i(nm), p2i(nm->code_begin()), p2i(nm->code_end()));
178  }
179
180  void log_failure(JavaThread* thread, CompileTask* task, const char* reason, const char* retry_message) {
181    StringLogMessage lm;
182    lm.print("%4d   COMPILE SKIPPED: %s", task->compile_id(), reason);
183    if (retry_message != NULL) {
184      lm.append(" (%s)", retry_message);
185    }
186    lm.print("\n");
187    log(thread, "%s", (const char*)lm);
188  }
189
190  void log_metaspace_failure(const char* reason) {
191    ResourceMark rm;
192    StringLogMessage lm;
193    lm.print("%4d   COMPILE PROFILING SKIPPED: %s", -1, reason);
194    lm.print("\n");
195    log(JavaThread::current(), "%s", (const char*)lm);
196  }
197};
198
199static CompilationLog* _compilation_log = NULL;
200
201void compileBroker_init() {
202  if (LogEvents) {
203    _compilation_log = new CompilationLog();
204  }
205}
206
207CompileTaskWrapper::CompileTaskWrapper(CompileTask* task) {
208  CompilerThread* thread = CompilerThread::current();
209  thread->set_task(task);
210  CompileLog*     log  = thread->log();
211  if (log != NULL)  task->log_task_start(log);
212}
213
214CompileTaskWrapper::~CompileTaskWrapper() {
215  CompilerThread* thread = CompilerThread::current();
216  CompileTask* task = thread->task();
217  CompileLog*  log  = thread->log();
218  if (log != NULL)  task->log_task_done(log);
219  thread->set_task(NULL);
220  task->set_code_handle(NULL);
221  thread->set_env(NULL);
222  if (task->is_blocking()) {
223    MutexLocker notifier(task->lock(), thread);
224    task->mark_complete();
225    // Notify the waiting thread that the compilation has completed.
226    task->lock()->notify_all();
227  } else {
228    task->mark_complete();
229
230    // By convention, the compiling thread is responsible for
231    // recycling a non-blocking CompileTask.
232    CompileTask::free(task);
233  }
234}
235
236
237CompileTask*  CompileTask::_task_free_list = NULL;
238#ifdef ASSERT
239int CompileTask::_num_allocated_tasks = 0;
240#endif
241/**
242 * Allocate a CompileTask, from the free list if possible.
243 */
244CompileTask* CompileTask::allocate() {
245  MutexLocker locker(CompileTaskAlloc_lock);
246  CompileTask* task = NULL;
247
248  if (_task_free_list != NULL) {
249    task = _task_free_list;
250    _task_free_list = task->next();
251    task->set_next(NULL);
252  } else {
253    task = new CompileTask();
254    DEBUG_ONLY(_num_allocated_tasks++;)
255    assert (WhiteBoxAPI || _num_allocated_tasks < 10000, "Leaking compilation tasks?");
256    task->set_next(NULL);
257    task->set_is_free(true);
258  }
259  assert(task->is_free(), "Task must be free.");
260  task->set_is_free(false);
261  return task;
262}
263
264
265/**
266 * Add a task to the free list.
267 */
268void CompileTask::free(CompileTask* task) {
269  MutexLocker locker(CompileTaskAlloc_lock);
270  if (!task->is_free()) {
271    task->set_code(NULL);
272    assert(!task->lock()->is_locked(), "Should not be locked when freed");
273    JNIHandles::destroy_global(task->_method_holder);
274    JNIHandles::destroy_global(task->_hot_method_holder);
275
276    task->set_is_free(true);
277    task->set_next(_task_free_list);
278    _task_free_list = task;
279  }
280}
281
282void CompileTask::initialize(int compile_id,
283                             methodHandle method,
284                             int osr_bci,
285                             int comp_level,
286                             methodHandle hot_method,
287                             int hot_count,
288                             const char* comment,
289                             bool is_blocking) {
290  assert(!_lock->is_locked(), "bad locking");
291
292  _compile_id = compile_id;
293  _method = method();
294  _method_holder = JNIHandles::make_global(method->method_holder()->klass_holder());
295  _osr_bci = osr_bci;
296  _is_blocking = is_blocking;
297  _comp_level = comp_level;
298  _num_inlined_bytecodes = 0;
299
300  _is_complete = false;
301  _is_success = false;
302  _code_handle = NULL;
303
304  _hot_method = NULL;
305  _hot_method_holder = NULL;
306  _hot_count = hot_count;
307  _time_queued = 0;  // tidy
308  _comment = comment;
309  _failure_reason = NULL;
310
311  if (LogCompilation) {
312    _time_queued = os::elapsed_counter();
313    if (hot_method.not_null()) {
314      if (hot_method == method) {
315        _hot_method = _method;
316      } else {
317        _hot_method = hot_method();
318        // only add loader or mirror if different from _method_holder
319        _hot_method_holder = JNIHandles::make_global(hot_method->method_holder()->klass_holder());
320      }
321    }
322  }
323
324  _next = NULL;
325}
326
327// ------------------------------------------------------------------
328// CompileTask::code/set_code
329nmethod* CompileTask::code() const {
330  if (_code_handle == NULL)  return NULL;
331  return _code_handle->code();
332}
333void CompileTask::set_code(nmethod* nm) {
334  if (_code_handle == NULL && nm == NULL)  return;
335  guarantee(_code_handle != NULL, "");
336  _code_handle->set_code(nm);
337  if (nm == NULL)  _code_handle = NULL;  // drop the handle also
338}
339
340void CompileTask::mark_on_stack() {
341  // Mark these methods as something redefine classes cannot remove.
342  _method->set_on_stack(true);
343  if (_hot_method != NULL) {
344    _hot_method->set_on_stack(true);
345  }
346}
347
348// ------------------------------------------------------------------
349// CompileTask::print_line_on_error
350//
351// This function is called by fatal error handler when the thread
352// causing troubles is a compiler thread.
353//
354// Do not grab any lock, do not allocate memory.
355//
356// Otherwise it's the same as CompileTask::print_line()
357//
358void CompileTask::print_line_on_error(outputStream* st, char* buf, int buflen) {
359  // print compiler name
360  st->print("%s:", CompileBroker::compiler_name(comp_level()));
361  print_compilation(st);
362}
363
364// ------------------------------------------------------------------
365// CompileTask::print_line
366void CompileTask::print_tty() {
367  ttyLocker ttyl;  // keep the following output all in one block
368  // print compiler name if requested
369  if (CIPrintCompilerName) tty->print("%s:", CompileBroker::compiler_name(comp_level()));
370    print_compilation(tty);
371}
372
373// ------------------------------------------------------------------
374// CompileTask::print_compilation_impl
375void CompileTask::print_compilation_impl(outputStream* st, Method* method, int compile_id, int comp_level,
376                                         bool is_osr_method, int osr_bci, bool is_blocking,
377                                         const char* msg, bool short_form, bool cr) {
378  if (!short_form) {
379    st->print("%7d ", (int) st->time_stamp().milliseconds());  // print timestamp
380  }
381  st->print("%4d ", compile_id);    // print compilation number
382
383  // For unloaded methods the transition to zombie occurs after the
384  // method is cleared so it's impossible to report accurate
385  // information for that case.
386  bool is_synchronized = false;
387  bool has_exception_handler = false;
388  bool is_native = false;
389  if (method != NULL) {
390    is_synchronized       = method->is_synchronized();
391    has_exception_handler = method->has_exception_handler();
392    is_native             = method->is_native();
393  }
394  // method attributes
395  const char compile_type   = is_osr_method                   ? '%' : ' ';
396  const char sync_char      = is_synchronized                 ? 's' : ' ';
397  const char exception_char = has_exception_handler           ? '!' : ' ';
398  const char blocking_char  = is_blocking                     ? 'b' : ' ';
399  const char native_char    = is_native                       ? 'n' : ' ';
400
401  // print method attributes
402  st->print("%c%c%c%c%c ", compile_type, sync_char, exception_char, blocking_char, native_char);
403
404  if (TieredCompilation) {
405    if (comp_level != -1)  st->print("%d ", comp_level);
406    else                   st->print("- ");
407  }
408  st->print("     ");  // more indent
409
410  if (method == NULL) {
411    st->print("(method)");
412  } else {
413    method->print_short_name(st);
414    if (is_osr_method) {
415      st->print(" @ %d", osr_bci);
416    }
417    if (method->is_native())
418      st->print(" (native)");
419    else
420      st->print(" (%d bytes)", method->code_size());
421  }
422
423  if (msg != NULL) {
424    st->print("   %s", msg);
425  }
426  if (cr) {
427    st->cr();
428  }
429}
430
431// ------------------------------------------------------------------
432// CompileTask::print_inlining
433void CompileTask::print_inlining(outputStream* st, ciMethod* method, int inline_level, int bci, const char* msg) {
434  //         1234567
435  st->print("        ");     // print timestamp
436  //         1234
437  st->print("     ");        // print compilation number
438
439  // method attributes
440  if (method->is_loaded()) {
441    const char sync_char      = method->is_synchronized()        ? 's' : ' ';
442    const char exception_char = method->has_exception_handlers() ? '!' : ' ';
443    const char monitors_char  = method->has_monitor_bytecodes()  ? 'm' : ' ';
444
445    // print method attributes
446    st->print(" %c%c%c  ", sync_char, exception_char, monitors_char);
447  } else {
448    //         %s!bn
449    st->print("      ");     // print method attributes
450  }
451
452  if (TieredCompilation) {
453    st->print("  ");
454  }
455  st->print("     ");        // more indent
456  st->print("    ");         // initial inlining indent
457
458  for (int i = 0; i < inline_level; i++)  st->print("  ");
459
460  st->print("@ %d  ", bci);  // print bci
461  method->print_short_name(st);
462  if (method->is_loaded())
463    st->print(" (%d bytes)", method->code_size());
464  else
465    st->print(" (not loaded)");
466
467  if (msg != NULL) {
468    st->print("   %s", msg);
469  }
470  st->cr();
471}
472
473// ------------------------------------------------------------------
474// CompileTask::print_inline_indent
475void CompileTask::print_inline_indent(int inline_level, outputStream* st) {
476  //         1234567
477  st->print("        ");     // print timestamp
478  //         1234
479  st->print("     ");        // print compilation number
480  //         %s!bn
481  st->print("      ");       // print method attributes
482  if (TieredCompilation) {
483    st->print("  ");
484  }
485  st->print("     ");        // more indent
486  st->print("    ");         // initial inlining indent
487  for (int i = 0; i < inline_level; i++)  st->print("  ");
488}
489
490// ------------------------------------------------------------------
491// CompileTask::print_compilation
492void CompileTask::print_compilation(outputStream* st, const char* msg, bool short_form, bool cr) {
493  bool is_osr_method = osr_bci() != InvocationEntryBci;
494  print_compilation_impl(st, method(), compile_id(), comp_level(), is_osr_method, osr_bci(), is_blocking(), msg, short_form, cr);
495}
496
497// ------------------------------------------------------------------
498// CompileTask::log_task
499void CompileTask::log_task(xmlStream* log) {
500  Thread* thread = Thread::current();
501  methodHandle method(thread, this->method());
502  ResourceMark rm(thread);
503
504  // <task id='9' method='M' osr_bci='X' level='1' blocking='1' stamp='1.234'>
505  log->print(" compile_id='%d'", _compile_id);
506  if (_osr_bci != CompileBroker::standard_entry_bci) {
507    log->print(" compile_kind='osr'");  // same as nmethod::compile_kind
508  } // else compile_kind='c2c'
509  if (!method.is_null())  log->method(method);
510  if (_osr_bci != CompileBroker::standard_entry_bci) {
511    log->print(" osr_bci='%d'", _osr_bci);
512  }
513  if (_comp_level != CompLevel_highest_tier) {
514    log->print(" level='%d'", _comp_level);
515  }
516  if (_is_blocking) {
517    log->print(" blocking='1'");
518  }
519  log->stamp();
520}
521
522
523// ------------------------------------------------------------------
524// CompileTask::log_task_queued
525void CompileTask::log_task_queued() {
526  Thread* thread = Thread::current();
527  ttyLocker ttyl;
528  ResourceMark rm(thread);
529
530  xtty->begin_elem("task_queued");
531  log_task(xtty);
532  if (_comment != NULL) {
533    xtty->print(" comment='%s'", _comment);
534  }
535  if (_hot_method != NULL) {
536    methodHandle hot(thread, _hot_method);
537    methodHandle method(thread, _method);
538    if (hot() != method()) {
539      xtty->method(hot);
540    }
541  }
542  if (_hot_count != 0) {
543    xtty->print(" hot_count='%d'", _hot_count);
544  }
545  xtty->end_elem();
546}
547
548
549// ------------------------------------------------------------------
550// CompileTask::log_task_start
551void CompileTask::log_task_start(CompileLog* log)   {
552  log->begin_head("task");
553  log_task(log);
554  log->end_head();
555}
556
557
558// ------------------------------------------------------------------
559// CompileTask::log_task_done
560void CompileTask::log_task_done(CompileLog* log) {
561  Thread* thread = Thread::current();
562  methodHandle method(thread, this->method());
563  ResourceMark rm(thread);
564
565  if (!_is_success) {
566    const char* reason = _failure_reason != NULL ? _failure_reason : "unknown";
567    log->elem("failure reason='%s'", reason);
568  }
569
570  // <task_done ... stamp='1.234'>  </task>
571  nmethod* nm = code();
572  log->begin_elem("task_done success='%d' nmsize='%d' count='%d'",
573                  _is_success, nm == NULL ? 0 : nm->content_size(),
574                  method->invocation_count());
575  int bec = method->backedge_count();
576  if (bec != 0)  log->print(" backedge_count='%d'", bec);
577  // Note:  "_is_complete" is about to be set, but is not.
578  if (_num_inlined_bytecodes != 0) {
579    log->print(" inlined_bytes='%d'", _num_inlined_bytecodes);
580  }
581  log->stamp();
582  log->end_elem();
583  log->tail("task");
584  log->clear_identities();   // next task will have different CI
585  if (log->unflushed_count() > 2000) {
586    log->flush();
587  }
588  log->mark_file_end();
589}
590
591
592
593/**
594 * Add a CompileTask to a CompileQueue.
595 */
596void CompileQueue::add(CompileTask* task) {
597  assert(MethodCompileQueue_lock->owned_by_self(), "must own lock");
598
599  task->set_next(NULL);
600  task->set_prev(NULL);
601
602  if (_last == NULL) {
603    // The compile queue is empty.
604    assert(_first == NULL, "queue is empty");
605    _first = task;
606    _last = task;
607  } else {
608    // Append the task to the queue.
609    assert(_last->next() == NULL, "not last");
610    _last->set_next(task);
611    task->set_prev(_last);
612    _last = task;
613  }
614  ++_size;
615
616  // Mark the method as being in the compile queue.
617  task->method()->set_queued_for_compilation();
618
619  if (CIPrintCompileQueue) {
620    print_tty();
621  }
622
623  if (LogCompilation && xtty != NULL) {
624    task->log_task_queued();
625  }
626
627  // Notify CompilerThreads that a task is available.
628  MethodCompileQueue_lock->notify_all();
629}
630
631/**
632 * Empties compilation queue by putting all compilation tasks onto
633 * a freelist. Furthermore, the method wakes up all threads that are
634 * waiting on a compilation task to finish. This can happen if background
635 * compilation is disabled.
636 */
637void CompileQueue::free_all() {
638  MutexLocker mu(MethodCompileQueue_lock);
639  CompileTask* next = _first;
640
641  // Iterate over all tasks in the compile queue
642  while (next != NULL) {
643    CompileTask* current = next;
644    next = current->next();
645    {
646      // Wake up thread that blocks on the compile task.
647      MutexLocker ct_lock(current->lock());
648      current->lock()->notify();
649    }
650    // Put the task back on the freelist.
651    CompileTask::free(current);
652  }
653  _first = NULL;
654
655  // Wake up all threads that block on the queue.
656  MethodCompileQueue_lock->notify_all();
657}
658
659/**
660 * Get the next CompileTask from a CompileQueue
661 */
662CompileTask* CompileQueue::get() {
663  MutexLocker locker(MethodCompileQueue_lock);
664  // If _first is NULL we have no more compile jobs. There are two reasons for
665  // having no compile jobs: First, we compiled everything we wanted. Second,
666  // we ran out of code cache so compilation has been disabled. In the latter
667  // case we perform code cache sweeps to free memory such that we can re-enable
668  // compilation.
669  while (_first == NULL) {
670    // Exit loop if compilation is disabled forever
671    if (CompileBroker::is_compilation_disabled_forever()) {
672      return NULL;
673    }
674
675    // If there are no compilation tasks and we can compile new jobs
676    // (i.e., there is enough free space in the code cache) there is
677    // no need to invoke the sweeper. As a result, the hotness of methods
678    // remains unchanged. This behavior is desired, since we want to keep
679    // the stable state, i.e., we do not want to evict methods from the
680    // code cache if it is unnecessary.
681    // We need a timed wait here, since compiler threads can exit if compilation
682    // is disabled forever. We use 5 seconds wait time; the exiting of compiler threads
683    // is not critical and we do not want idle compiler threads to wake up too often.
684    MethodCompileQueue_lock->wait(!Mutex::_no_safepoint_check_flag, 5*1000);
685  }
686
687  if (CompileBroker::is_compilation_disabled_forever()) {
688    return NULL;
689  }
690
691  CompileTask* task;
692  {
693    No_Safepoint_Verifier nsv;
694    task = CompilationPolicy::policy()->select_task(this);
695  }
696  remove(task);
697  purge_stale_tasks(); // may temporarily release MCQ lock
698  return task;
699}
700
701// Clean & deallocate stale compile tasks.
702// Temporarily releases MethodCompileQueue lock.
703void CompileQueue::purge_stale_tasks() {
704  assert(MethodCompileQueue_lock->owned_by_self(), "must own lock");
705  if (_first_stale != NULL) {
706    // Stale tasks are purged when MCQ lock is released,
707    // but _first_stale updates are protected by MCQ lock.
708    // Once task processing starts and MCQ lock is released,
709    // other compiler threads can reuse _first_stale.
710    CompileTask* head = _first_stale;
711    _first_stale = NULL;
712    {
713      MutexUnlocker ul(MethodCompileQueue_lock);
714      for (CompileTask* task = head; task != NULL; ) {
715        CompileTask* next_task = task->next();
716        CompileTaskWrapper ctw(task); // Frees the task
717        task->set_failure_reason("stale task");
718        task = next_task;
719      }
720    }
721  }
722}
723
724void CompileQueue::remove(CompileTask* task) {
725   assert(MethodCompileQueue_lock->owned_by_self(), "must own lock");
726  if (task->prev() != NULL) {
727    task->prev()->set_next(task->next());
728  } else {
729    // max is the first element
730    assert(task == _first, "Sanity");
731    _first = task->next();
732  }
733
734  if (task->next() != NULL) {
735    task->next()->set_prev(task->prev());
736  } else {
737    // max is the last element
738    assert(task == _last, "Sanity");
739    _last = task->prev();
740  }
741  --_size;
742}
743
744void CompileQueue::remove_and_mark_stale(CompileTask* task) {
745  assert(MethodCompileQueue_lock->owned_by_self(), "must own lock");
746  remove(task);
747
748  // Enqueue the task for reclamation (should be done outside MCQ lock)
749  task->set_next(_first_stale);
750  task->set_prev(NULL);
751  _first_stale = task;
752}
753
754// methods in the compile queue need to be marked as used on the stack
755// so that they don't get reclaimed by Redefine Classes
756void CompileQueue::mark_on_stack() {
757  CompileTask* task = _first;
758  while (task != NULL) {
759    task->mark_on_stack();
760    task = task->next();
761  }
762}
763
764
765CompileQueue* CompileBroker::compile_queue(int comp_level) {
766  if (is_c2_compile(comp_level)) return _c2_compile_queue;
767  if (is_c1_compile(comp_level)) return _c1_compile_queue;
768  return NULL;
769}
770
771
772void CompileBroker::print_compile_queues(outputStream* st) {
773  MutexLocker locker(MethodCompileQueue_lock);
774  if (_c1_compile_queue != NULL) {
775    _c1_compile_queue->print(st);
776  }
777  if (_c2_compile_queue != NULL) {
778    _c2_compile_queue->print(st);
779  }
780}
781
782void CompileQueue::print(outputStream* st) {
783  assert(MethodCompileQueue_lock->owned_by_self(), "must own lock");
784  st->print_cr("Contents of %s", name());
785  st->print_cr("----------------------------");
786  CompileTask* task = _first;
787  if (task == NULL) {
788    st->print_cr("Empty");
789  } else {
790    while (task != NULL) {
791      task->print_compilation(st, NULL, true, true);
792      task = task->next();
793    }
794  }
795  st->print_cr("----------------------------");
796}
797
798void CompileQueue::print_tty() {
799  ttyLocker ttyl;
800  print(tty);
801}
802
803CompilerCounters::CompilerCounters(const char* thread_name, int instance, TRAPS) {
804
805  _current_method[0] = '\0';
806  _compile_type = CompileBroker::no_compile;
807
808  if (UsePerfData) {
809    ResourceMark rm;
810
811    // create the thread instance name space string - don't create an
812    // instance subspace if instance is -1 - keeps the adapterThread
813    // counters  from having a ".0" namespace.
814    const char* thread_i = (instance == -1) ? thread_name :
815                      PerfDataManager::name_space(thread_name, instance);
816
817
818    char* name = PerfDataManager::counter_name(thread_i, "method");
819    _perf_current_method =
820               PerfDataManager::create_string_variable(SUN_CI, name,
821                                                       cmname_buffer_length,
822                                                       _current_method, CHECK);
823
824    name = PerfDataManager::counter_name(thread_i, "type");
825    _perf_compile_type = PerfDataManager::create_variable(SUN_CI, name,
826                                                          PerfData::U_None,
827                                                         (jlong)_compile_type,
828                                                          CHECK);
829
830    name = PerfDataManager::counter_name(thread_i, "time");
831    _perf_time = PerfDataManager::create_counter(SUN_CI, name,
832                                                 PerfData::U_Ticks, CHECK);
833
834    name = PerfDataManager::counter_name(thread_i, "compiles");
835    _perf_compiles = PerfDataManager::create_counter(SUN_CI, name,
836                                                     PerfData::U_Events, CHECK);
837  }
838}
839
840// ------------------------------------------------------------------
841// CompileBroker::compilation_init
842//
843// Initialize the Compilation object
844void CompileBroker::compilation_init() {
845  _last_method_compiled[0] = '\0';
846
847  // No need to initialize compilation system if we do not use it.
848  if (!UseCompiler) {
849    return;
850  }
851#ifndef SHARK
852  // Set the interface to the current compiler(s).
853  int c1_count = CompilationPolicy::policy()->compiler_count(CompLevel_simple);
854  int c2_count = CompilationPolicy::policy()->compiler_count(CompLevel_full_optimization);
855#ifdef COMPILER1
856  if (c1_count > 0) {
857    _compilers[0] = new Compiler();
858  }
859#endif // COMPILER1
860
861#ifdef COMPILER2
862  if (c2_count > 0) {
863    _compilers[1] = new C2Compiler();
864  }
865#endif // COMPILER2
866
867#else // SHARK
868  int c1_count = 0;
869  int c2_count = 1;
870
871  _compilers[1] = new SharkCompiler();
872#endif // SHARK
873
874  // Start the compiler thread(s) and the sweeper thread
875  init_compiler_sweeper_threads(c1_count, c2_count);
876  // totalTime performance counter is always created as it is required
877  // by the implementation of java.lang.management.CompilationMBean.
878  {
879    EXCEPTION_MARK;
880    _perf_total_compilation =
881                 PerfDataManager::create_counter(JAVA_CI, "totalTime",
882                                                 PerfData::U_Ticks, CHECK);
883  }
884
885
886  if (UsePerfData) {
887
888    EXCEPTION_MARK;
889
890    // create the jvmstat performance counters
891    _perf_osr_compilation =
892                 PerfDataManager::create_counter(SUN_CI, "osrTime",
893                                                 PerfData::U_Ticks, CHECK);
894
895    _perf_standard_compilation =
896                 PerfDataManager::create_counter(SUN_CI, "standardTime",
897                                                 PerfData::U_Ticks, CHECK);
898
899    _perf_total_bailout_count =
900                 PerfDataManager::create_counter(SUN_CI, "totalBailouts",
901                                                 PerfData::U_Events, CHECK);
902
903    _perf_total_invalidated_count =
904                 PerfDataManager::create_counter(SUN_CI, "totalInvalidates",
905                                                 PerfData::U_Events, CHECK);
906
907    _perf_total_compile_count =
908                 PerfDataManager::create_counter(SUN_CI, "totalCompiles",
909                                                 PerfData::U_Events, CHECK);
910    _perf_total_osr_compile_count =
911                 PerfDataManager::create_counter(SUN_CI, "osrCompiles",
912                                                 PerfData::U_Events, CHECK);
913
914    _perf_total_standard_compile_count =
915                 PerfDataManager::create_counter(SUN_CI, "standardCompiles",
916                                                 PerfData::U_Events, CHECK);
917
918    _perf_sum_osr_bytes_compiled =
919                 PerfDataManager::create_counter(SUN_CI, "osrBytes",
920                                                 PerfData::U_Bytes, CHECK);
921
922    _perf_sum_standard_bytes_compiled =
923                 PerfDataManager::create_counter(SUN_CI, "standardBytes",
924                                                 PerfData::U_Bytes, CHECK);
925
926    _perf_sum_nmethod_size =
927                 PerfDataManager::create_counter(SUN_CI, "nmethodSize",
928                                                 PerfData::U_Bytes, CHECK);
929
930    _perf_sum_nmethod_code_size =
931                 PerfDataManager::create_counter(SUN_CI, "nmethodCodeSize",
932                                                 PerfData::U_Bytes, CHECK);
933
934    _perf_last_method =
935                 PerfDataManager::create_string_variable(SUN_CI, "lastMethod",
936                                       CompilerCounters::cmname_buffer_length,
937                                       "", CHECK);
938
939    _perf_last_failed_method =
940            PerfDataManager::create_string_variable(SUN_CI, "lastFailedMethod",
941                                       CompilerCounters::cmname_buffer_length,
942                                       "", CHECK);
943
944    _perf_last_invalidated_method =
945        PerfDataManager::create_string_variable(SUN_CI, "lastInvalidatedMethod",
946                                     CompilerCounters::cmname_buffer_length,
947                                     "", CHECK);
948
949    _perf_last_compile_type =
950             PerfDataManager::create_variable(SUN_CI, "lastType",
951                                              PerfData::U_None,
952                                              (jlong)CompileBroker::no_compile,
953                                              CHECK);
954
955    _perf_last_compile_size =
956             PerfDataManager::create_variable(SUN_CI, "lastSize",
957                                              PerfData::U_Bytes,
958                                              (jlong)CompileBroker::no_compile,
959                                              CHECK);
960
961
962    _perf_last_failed_type =
963             PerfDataManager::create_variable(SUN_CI, "lastFailedType",
964                                              PerfData::U_None,
965                                              (jlong)CompileBroker::no_compile,
966                                              CHECK);
967
968    _perf_last_invalidated_type =
969         PerfDataManager::create_variable(SUN_CI, "lastInvalidatedType",
970                                          PerfData::U_None,
971                                          (jlong)CompileBroker::no_compile,
972                                          CHECK);
973  }
974
975  _initialized = true;
976}
977
978
979JavaThread* CompileBroker::make_thread(const char* name, CompileQueue* queue, CompilerCounters* counters,
980                                       AbstractCompiler* comp, bool compiler_thread, TRAPS) {
981  JavaThread* thread = NULL;
982  Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_0);
983  instanceKlassHandle klass (THREAD, k);
984  instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_0);
985  Handle string = java_lang_String::create_from_str(name, CHECK_0);
986
987  // Initialize thread_oop to put it into the system threadGroup
988  Handle thread_group (THREAD,  Universe::system_thread_group());
989  JavaValue result(T_VOID);
990  JavaCalls::call_special(&result, thread_oop,
991                       klass,
992                       vmSymbols::object_initializer_name(),
993                       vmSymbols::threadgroup_string_void_signature(),
994                       thread_group,
995                       string,
996                       CHECK_0);
997
998  {
999    MutexLocker mu(Threads_lock, THREAD);
1000    if (compiler_thread) {
1001      thread = new CompilerThread(queue, counters);
1002    } else {
1003      thread = new CodeCacheSweeperThread();
1004    }
1005    // At this point the new CompilerThread data-races with this startup
1006    // thread (which I believe is the primoridal thread and NOT the VM
1007    // thread).  This means Java bytecodes being executed at startup can
1008    // queue compile jobs which will run at whatever default priority the
1009    // newly created CompilerThread runs at.
1010
1011
1012    // At this point it may be possible that no osthread was created for the
1013    // JavaThread due to lack of memory. We would have to throw an exception
1014    // in that case. However, since this must work and we do not allow
1015    // exceptions anyway, check and abort if this fails.
1016
1017    if (thread == NULL || thread->osthread() == NULL) {
1018      vm_exit_during_initialization("java.lang.OutOfMemoryError",
1019                                    os::native_thread_creation_failed_msg());
1020    }
1021
1022    java_lang_Thread::set_thread(thread_oop(), thread);
1023
1024    // Note that this only sets the JavaThread _priority field, which by
1025    // definition is limited to Java priorities and not OS priorities.
1026    // The os-priority is set in the CompilerThread startup code itself
1027
1028    java_lang_Thread::set_priority(thread_oop(), NearMaxPriority);
1029
1030    // Note that we cannot call os::set_priority because it expects Java
1031    // priorities and we are *explicitly* using OS priorities so that it's
1032    // possible to set the compiler thread priority higher than any Java
1033    // thread.
1034
1035    int native_prio = CompilerThreadPriority;
1036    if (native_prio == -1) {
1037      if (UseCriticalCompilerThreadPriority) {
1038        native_prio = os::java_to_os_priority[CriticalPriority];
1039      } else {
1040        native_prio = os::java_to_os_priority[NearMaxPriority];
1041      }
1042    }
1043    os::set_native_priority(thread, native_prio);
1044
1045    java_lang_Thread::set_daemon(thread_oop());
1046
1047    thread->set_threadObj(thread_oop());
1048    if (compiler_thread) {
1049      thread->as_CompilerThread()->set_compiler(comp);
1050    }
1051    Threads::add(thread);
1052    Thread::start(thread);
1053  }
1054
1055  // Let go of Threads_lock before yielding
1056  os::naked_yield(); // make sure that the compiler thread is started early (especially helpful on SOLARIS)
1057
1058  return thread;
1059}
1060
1061
1062void CompileBroker::init_compiler_sweeper_threads(int c1_compiler_count, int c2_compiler_count) {
1063  EXCEPTION_MARK;
1064#if !defined(ZERO) && !defined(SHARK)
1065  assert(c2_compiler_count > 0 || c1_compiler_count > 0, "No compilers?");
1066#endif // !ZERO && !SHARK
1067  // Initialize the compilation queue
1068  if (c2_compiler_count > 0) {
1069    _c2_compile_queue  = new CompileQueue("C2 compile queue");
1070    _compilers[1]->set_num_compiler_threads(c2_compiler_count);
1071  }
1072  if (c1_compiler_count > 0) {
1073    _c1_compile_queue  = new CompileQueue("C1 compile queue");
1074    _compilers[0]->set_num_compiler_threads(c1_compiler_count);
1075  }
1076
1077  int compiler_count = c1_compiler_count + c2_compiler_count;
1078
1079  char name_buffer[256];
1080  const bool compiler_thread = true;
1081  for (int i = 0; i < c2_compiler_count; i++) {
1082    // Create a name for our thread.
1083    sprintf(name_buffer, "C2 CompilerThread%d", i);
1084    CompilerCounters* counters = new CompilerCounters("compilerThread", i, CHECK);
1085    // Shark and C2
1086    make_thread(name_buffer, _c2_compile_queue, counters, _compilers[1], compiler_thread, CHECK);
1087  }
1088
1089  for (int i = c2_compiler_count; i < compiler_count; i++) {
1090    // Create a name for our thread.
1091    sprintf(name_buffer, "C1 CompilerThread%d", i);
1092    CompilerCounters* counters = new CompilerCounters("compilerThread", i, CHECK);
1093    // C1
1094    make_thread(name_buffer, _c1_compile_queue, counters, _compilers[0], compiler_thread, CHECK);
1095  }
1096
1097  if (UsePerfData) {
1098    PerfDataManager::create_constant(SUN_CI, "threads", PerfData::U_Bytes, compiler_count, CHECK);
1099  }
1100
1101  if (MethodFlushing) {
1102    // Initialize the sweeper thread
1103    make_thread("Sweeper thread", NULL, NULL, NULL, false, CHECK);
1104  }
1105}
1106
1107
1108/**
1109 * Set the methods on the stack as on_stack so that redefine classes doesn't
1110 * reclaim them. This method is executed at a safepoint.
1111 */
1112void CompileBroker::mark_on_stack() {
1113  assert(SafepointSynchronize::is_at_safepoint(), "sanity check");
1114  // Since we are at a safepoint, we do not need a lock to access
1115  // the compile queues.
1116  if (_c2_compile_queue != NULL) {
1117    _c2_compile_queue->mark_on_stack();
1118  }
1119  if (_c1_compile_queue != NULL) {
1120    _c1_compile_queue->mark_on_stack();
1121  }
1122}
1123
1124// ------------------------------------------------------------------
1125// CompileBroker::compile_method
1126//
1127// Request compilation of a method.
1128void CompileBroker::compile_method_base(methodHandle method,
1129                                        int osr_bci,
1130                                        int comp_level,
1131                                        methodHandle hot_method,
1132                                        int hot_count,
1133                                        const char* comment,
1134                                        Thread* thread) {
1135  // do nothing if compiler thread(s) is not available
1136  if (!_initialized) {
1137    return;
1138  }
1139
1140  guarantee(!method->is_abstract(), "cannot compile abstract methods");
1141  assert(method->method_holder()->oop_is_instance(),
1142         "sanity check");
1143  assert(!method->method_holder()->is_not_initialized(),
1144         "method holder must be initialized");
1145  assert(!method->is_method_handle_intrinsic(), "do not enqueue these guys");
1146
1147  if (CIPrintRequests) {
1148    tty->print("request: ");
1149    method->print_short_name(tty);
1150    if (osr_bci != InvocationEntryBci) {
1151      tty->print(" osr_bci: %d", osr_bci);
1152    }
1153    tty->print(" comment: %s count: %d", comment, hot_count);
1154    if (!hot_method.is_null()) {
1155      tty->print(" hot: ");
1156      if (hot_method() != method()) {
1157          hot_method->print_short_name(tty);
1158      } else {
1159        tty->print("yes");
1160      }
1161    }
1162    tty->cr();
1163  }
1164
1165  // A request has been made for compilation.  Before we do any
1166  // real work, check to see if the method has been compiled
1167  // in the meantime with a definitive result.
1168  if (compilation_is_complete(method, osr_bci, comp_level)) {
1169    return;
1170  }
1171
1172#ifndef PRODUCT
1173  if (osr_bci != -1 && !FLAG_IS_DEFAULT(OSROnlyBCI)) {
1174    if ((OSROnlyBCI > 0) ? (OSROnlyBCI != osr_bci) : (-OSROnlyBCI == osr_bci)) {
1175      // Positive OSROnlyBCI means only compile that bci.  Negative means don't compile that BCI.
1176      return;
1177    }
1178  }
1179#endif
1180
1181  // If this method is already in the compile queue, then
1182  // we do not block the current thread.
1183  if (compilation_is_in_queue(method)) {
1184    // We may want to decay our counter a bit here to prevent
1185    // multiple denied requests for compilation.  This is an
1186    // open compilation policy issue. Note: The other possibility,
1187    // in the case that this is a blocking compile request, is to have
1188    // all subsequent blocking requesters wait for completion of
1189    // ongoing compiles. Note that in this case we'll need a protocol
1190    // for freeing the associated compile tasks. [Or we could have
1191    // a single static monitor on which all these waiters sleep.]
1192    return;
1193  }
1194
1195  // If the requesting thread is holding the pending list lock
1196  // then we just return. We can't risk blocking while holding
1197  // the pending list lock or a 3-way deadlock may occur
1198  // between the reference handler thread, a GC (instigated
1199  // by a compiler thread), and compiled method registration.
1200  if (InstanceRefKlass::owns_pending_list_lock(JavaThread::current())) {
1201    return;
1202  }
1203
1204  if (TieredCompilation) {
1205    // Tiered policy requires MethodCounters to exist before adding a method to
1206    // the queue. Create if we don't have them yet.
1207    method->get_method_counters(thread);
1208  }
1209
1210  // Outputs from the following MutexLocker block:
1211  CompileTask* task     = NULL;
1212  bool         blocking = false;
1213  CompileQueue* queue  = compile_queue(comp_level);
1214
1215  // Acquire our lock.
1216  {
1217    MutexLocker locker(MethodCompileQueue_lock, thread);
1218
1219    // Make sure the method has not slipped into the queues since
1220    // last we checked; note that those checks were "fast bail-outs".
1221    // Here we need to be more careful, see 14012000 below.
1222    if (compilation_is_in_queue(method)) {
1223      return;
1224    }
1225
1226    // We need to check again to see if the compilation has
1227    // completed.  A previous compilation may have registered
1228    // some result.
1229    if (compilation_is_complete(method, osr_bci, comp_level)) {
1230      return;
1231    }
1232
1233    // We now know that this compilation is not pending, complete,
1234    // or prohibited.  Assign a compile_id to this compilation
1235    // and check to see if it is in our [Start..Stop) range.
1236    int compile_id = assign_compile_id(method, osr_bci);
1237    if (compile_id == 0) {
1238      // The compilation falls outside the allowed range.
1239      return;
1240    }
1241
1242    // Should this thread wait for completion of the compile?
1243    blocking = is_compile_blocking();
1244
1245    // We will enter the compilation in the queue.
1246    // 14012000: Note that this sets the queued_for_compile bits in
1247    // the target method. We can now reason that a method cannot be
1248    // queued for compilation more than once, as follows:
1249    // Before a thread queues a task for compilation, it first acquires
1250    // the compile queue lock, then checks if the method's queued bits
1251    // are set or it has already been compiled. Thus there can not be two
1252    // instances of a compilation task for the same method on the
1253    // compilation queue. Consider now the case where the compilation
1254    // thread has already removed a task for that method from the queue
1255    // and is in the midst of compiling it. In this case, the
1256    // queued_for_compile bits must be set in the method (and these
1257    // will be visible to the current thread, since the bits were set
1258    // under protection of the compile queue lock, which we hold now.
1259    // When the compilation completes, the compiler thread first sets
1260    // the compilation result and then clears the queued_for_compile
1261    // bits. Neither of these actions are protected by a barrier (or done
1262    // under the protection of a lock), so the only guarantee we have
1263    // (on machines with TSO (Total Store Order)) is that these values
1264    // will update in that order. As a result, the only combinations of
1265    // these bits that the current thread will see are, in temporal order:
1266    // <RESULT, QUEUE> :
1267    //     <0, 1> : in compile queue, but not yet compiled
1268    //     <1, 1> : compiled but queue bit not cleared
1269    //     <1, 0> : compiled and queue bit cleared
1270    // Because we first check the queue bits then check the result bits,
1271    // we are assured that we cannot introduce a duplicate task.
1272    // Note that if we did the tests in the reverse order (i.e. check
1273    // result then check queued bit), we could get the result bit before
1274    // the compilation completed, and the queue bit after the compilation
1275    // completed, and end up introducing a "duplicate" (redundant) task.
1276    // In that case, the compiler thread should first check if a method
1277    // has already been compiled before trying to compile it.
1278    // NOTE: in the event that there are multiple compiler threads and
1279    // there is de-optimization/recompilation, things will get hairy,
1280    // and in that case it's best to protect both the testing (here) of
1281    // these bits, and their updating (here and elsewhere) under a
1282    // common lock.
1283    task = create_compile_task(queue,
1284                               compile_id, method,
1285                               osr_bci, comp_level,
1286                               hot_method, hot_count, comment,
1287                               blocking);
1288  }
1289
1290  if (blocking) {
1291    wait_for_completion(task);
1292  }
1293}
1294
1295
1296nmethod* CompileBroker::compile_method(methodHandle method, int osr_bci,
1297                                       int comp_level,
1298                                       methodHandle hot_method, int hot_count,
1299                                       const char* comment, Thread* THREAD) {
1300  // make sure arguments make sense
1301  assert(method->method_holder()->oop_is_instance(), "not an instance method");
1302  assert(osr_bci == InvocationEntryBci || (0 <= osr_bci && osr_bci < method->code_size()), "bci out of range");
1303  assert(!method->is_abstract() && (osr_bci == InvocationEntryBci || !method->is_native()), "cannot compile abstract/native methods");
1304  assert(!method->method_holder()->is_not_initialized(), "method holder must be initialized");
1305  // allow any levels for WhiteBox
1306  assert(WhiteBoxAPI || TieredCompilation || comp_level == CompLevel_highest_tier, "only CompLevel_highest_tier must be used in non-tiered");
1307  // return quickly if possible
1308
1309  // lock, make sure that the compilation
1310  // isn't prohibited in a straightforward way.
1311  AbstractCompiler *comp = CompileBroker::compiler(comp_level);
1312  if (comp == NULL || !comp->can_compile_method(method) ||
1313      compilation_is_prohibited(method, osr_bci, comp_level)) {
1314    return NULL;
1315  }
1316
1317  if (osr_bci == InvocationEntryBci) {
1318    // standard compilation
1319    nmethod* method_code = method->code();
1320    if (method_code != NULL) {
1321      if (compilation_is_complete(method, osr_bci, comp_level)) {
1322        return method_code;
1323      }
1324    }
1325    if (method->is_not_compilable(comp_level)) {
1326      return NULL;
1327    }
1328  } else {
1329    // osr compilation
1330#ifndef TIERED
1331    // seems like an assert of dubious value
1332    assert(comp_level == CompLevel_highest_tier,
1333           "all OSR compiles are assumed to be at a single compilation lavel");
1334#endif // TIERED
1335    // We accept a higher level osr method
1336    nmethod* nm = method->lookup_osr_nmethod_for(osr_bci, comp_level, false);
1337    if (nm != NULL) return nm;
1338    if (method->is_not_osr_compilable(comp_level)) return NULL;
1339  }
1340
1341  assert(!HAS_PENDING_EXCEPTION, "No exception should be present");
1342  // some prerequisites that are compiler specific
1343  if (comp->is_c2() || comp->is_shark()) {
1344    method->constants()->resolve_string_constants(CHECK_AND_CLEAR_NULL);
1345    // Resolve all classes seen in the signature of the method
1346    // we are compiling.
1347    Method::load_signature_classes(method, CHECK_AND_CLEAR_NULL);
1348  }
1349
1350  // If the method is native, do the lookup in the thread requesting
1351  // the compilation. Native lookups can load code, which is not
1352  // permitted during compilation.
1353  //
1354  // Note: A native method implies non-osr compilation which is
1355  //       checked with an assertion at the entry of this method.
1356  if (method->is_native() && !method->is_method_handle_intrinsic()) {
1357    bool in_base_library;
1358    address adr = NativeLookup::lookup(method, in_base_library, THREAD);
1359    if (HAS_PENDING_EXCEPTION) {
1360      // In case of an exception looking up the method, we just forget
1361      // about it. The interpreter will kick-in and throw the exception.
1362      method->set_not_compilable(); // implies is_not_osr_compilable()
1363      CLEAR_PENDING_EXCEPTION;
1364      return NULL;
1365    }
1366    assert(method->has_native_function(), "must have native code by now");
1367  }
1368
1369  // RedefineClasses() has replaced this method; just return
1370  if (method->is_old()) {
1371    return NULL;
1372  }
1373
1374  // JVMTI -- post_compile_event requires jmethod_id() that may require
1375  // a lock the compiling thread can not acquire. Prefetch it here.
1376  if (JvmtiExport::should_post_compiled_method_load()) {
1377    method->jmethod_id();
1378  }
1379
1380  // do the compilation
1381  if (method->is_native()) {
1382    if (!PreferInterpreterNativeStubs || method->is_method_handle_intrinsic()) {
1383      // To properly handle the appendix argument for out-of-line calls we are using a small trampoline that
1384      // pops off the appendix argument and jumps to the target (see gen_special_dispatch in SharedRuntime).
1385      //
1386      // Since normal compiled-to-compiled calls are not able to handle such a thing we MUST generate an adapter
1387      // in this case.  If we can't generate one and use it we can not execute the out-of-line method handle calls.
1388      AdapterHandlerLibrary::create_native_wrapper(method);
1389    } else {
1390      return NULL;
1391    }
1392  } else {
1393    // If the compiler is shut off due to code cache getting full
1394    // fail out now so blocking compiles dont hang the java thread
1395    if (!should_compile_new_jobs()) {
1396      CompilationPolicy::policy()->delay_compilation(method());
1397      return NULL;
1398    }
1399    compile_method_base(method, osr_bci, comp_level, hot_method, hot_count, comment, THREAD);
1400  }
1401
1402  // return requested nmethod
1403  // We accept a higher level osr method
1404  return osr_bci  == InvocationEntryBci ? method->code() : method->lookup_osr_nmethod_for(osr_bci, comp_level, false);
1405}
1406
1407
1408// ------------------------------------------------------------------
1409// CompileBroker::compilation_is_complete
1410//
1411// See if compilation of this method is already complete.
1412bool CompileBroker::compilation_is_complete(methodHandle method,
1413                                            int          osr_bci,
1414                                            int          comp_level) {
1415  bool is_osr = (osr_bci != standard_entry_bci);
1416  if (is_osr) {
1417    if (method->is_not_osr_compilable(comp_level)) {
1418      return true;
1419    } else {
1420      nmethod* result = method->lookup_osr_nmethod_for(osr_bci, comp_level, true);
1421      return (result != NULL);
1422    }
1423  } else {
1424    if (method->is_not_compilable(comp_level)) {
1425      return true;
1426    } else {
1427      nmethod* result = method->code();
1428      if (result == NULL) return false;
1429      return comp_level == result->comp_level();
1430    }
1431  }
1432}
1433
1434
1435/**
1436 * See if this compilation is already requested.
1437 *
1438 * Implementation note: there is only a single "is in queue" bit
1439 * for each method.  This means that the check below is overly
1440 * conservative in the sense that an osr compilation in the queue
1441 * will block a normal compilation from entering the queue (and vice
1442 * versa).  This can be remedied by a full queue search to disambiguate
1443 * cases.  If it is deemed profitable, this may be done.
1444 */
1445bool CompileBroker::compilation_is_in_queue(methodHandle method) {
1446  return method->queued_for_compilation();
1447}
1448
1449// ------------------------------------------------------------------
1450// CompileBroker::compilation_is_prohibited
1451//
1452// See if this compilation is not allowed.
1453bool CompileBroker::compilation_is_prohibited(methodHandle method, int osr_bci, int comp_level) {
1454  bool is_native = method->is_native();
1455  // Some compilers may not support the compilation of natives.
1456  AbstractCompiler *comp = compiler(comp_level);
1457  if (is_native &&
1458      (!CICompileNatives || comp == NULL || !comp->supports_native())) {
1459    method->set_not_compilable_quietly(comp_level);
1460    return true;
1461  }
1462
1463  bool is_osr = (osr_bci != standard_entry_bci);
1464  // Some compilers may not support on stack replacement.
1465  if (is_osr &&
1466      (!CICompileOSR || comp == NULL || !comp->supports_osr())) {
1467    method->set_not_osr_compilable(comp_level);
1468    return true;
1469  }
1470
1471  // The method may be explicitly excluded by the user.
1472  bool quietly;
1473  double scale;
1474  if (CompilerOracle::should_exclude(method, quietly)
1475      || (CompilerOracle::has_option_value(method, "CompileThresholdScaling", scale) && scale == 0)) {
1476    if (!quietly) {
1477      // This does not happen quietly...
1478      ResourceMark rm;
1479      tty->print("### Excluding %s:%s",
1480                 method->is_native() ? "generation of native wrapper" : "compile",
1481                 (method->is_static() ? " static" : ""));
1482      method->print_short_name(tty);
1483      tty->cr();
1484    }
1485    method->set_not_compilable(CompLevel_all, !quietly, "excluded by CompilerOracle");
1486  }
1487
1488  return false;
1489}
1490
1491/**
1492 * Generate serialized IDs for compilation requests. If certain debugging flags are used
1493 * and the ID is not within the specified range, the method is not compiled and 0 is returned.
1494 * The function also allows to generate separate compilation IDs for OSR compilations.
1495 */
1496int CompileBroker::assign_compile_id(methodHandle method, int osr_bci) {
1497#ifdef ASSERT
1498  bool is_osr = (osr_bci != standard_entry_bci);
1499  int id;
1500  if (method->is_native()) {
1501    assert(!is_osr, "can't be osr");
1502    // Adapters, native wrappers and method handle intrinsics
1503    // should be generated always.
1504    return Atomic::add(1, &_compilation_id);
1505  } else if (CICountOSR && is_osr) {
1506    id = Atomic::add(1, &_osr_compilation_id);
1507    if (CIStartOSR <= id && id < CIStopOSR) {
1508      return id;
1509    }
1510  } else {
1511    id = Atomic::add(1, &_compilation_id);
1512    if (CIStart <= id && id < CIStop) {
1513      return id;
1514    }
1515  }
1516
1517  // Method was not in the appropriate compilation range.
1518  method->set_not_compilable_quietly();
1519  return 0;
1520#else
1521  // CICountOSR is a develop flag and set to 'false' by default. In a product built,
1522  // only _compilation_id is incremented.
1523  return Atomic::add(1, &_compilation_id);
1524#endif
1525}
1526
1527/**
1528 * Should the current thread block until this compilation request
1529 * has been fulfilled?
1530 */
1531bool CompileBroker::is_compile_blocking() {
1532  assert(!InstanceRefKlass::owns_pending_list_lock(JavaThread::current()), "possible deadlock");
1533  return !BackgroundCompilation;
1534}
1535
1536
1537// ------------------------------------------------------------------
1538// CompileBroker::preload_classes
1539void CompileBroker::preload_classes(methodHandle method, TRAPS) {
1540  // Move this code over from c1_Compiler.cpp
1541  ShouldNotReachHere();
1542}
1543
1544
1545// ------------------------------------------------------------------
1546// CompileBroker::create_compile_task
1547//
1548// Create a CompileTask object representing the current request for
1549// compilation.  Add this task to the queue.
1550CompileTask* CompileBroker::create_compile_task(CompileQueue* queue,
1551                                              int           compile_id,
1552                                              methodHandle  method,
1553                                              int           osr_bci,
1554                                              int           comp_level,
1555                                              methodHandle  hot_method,
1556                                              int           hot_count,
1557                                              const char*   comment,
1558                                              bool          blocking) {
1559  CompileTask* new_task = CompileTask::allocate();
1560  new_task->initialize(compile_id, method, osr_bci, comp_level,
1561                       hot_method, hot_count, comment,
1562                       blocking);
1563  queue->add(new_task);
1564  return new_task;
1565}
1566
1567
1568/**
1569 *  Wait for the compilation task to complete.
1570 */
1571void CompileBroker::wait_for_completion(CompileTask* task) {
1572  if (CIPrintCompileQueue) {
1573    ttyLocker ttyl;
1574    tty->print_cr("BLOCKING FOR COMPILE");
1575  }
1576
1577  assert(task->is_blocking(), "can only wait on blocking task");
1578
1579  JavaThread* thread = JavaThread::current();
1580  thread->set_blocked_on_compilation(true);
1581
1582  methodHandle method(thread, task->method());
1583  {
1584    MutexLocker waiter(task->lock(), thread);
1585
1586    while (!task->is_complete() && !is_compilation_disabled_forever()) {
1587      task->lock()->wait();
1588    }
1589  }
1590
1591  thread->set_blocked_on_compilation(false);
1592  if (is_compilation_disabled_forever()) {
1593    CompileTask::free(task);
1594    return;
1595  }
1596
1597  // It is harmless to check this status without the lock, because
1598  // completion is a stable property (until the task object is recycled).
1599  assert(task->is_complete(), "Compilation should have completed");
1600  assert(task->code_handle() == NULL, "must be reset");
1601
1602  // By convention, the waiter is responsible for recycling a
1603  // blocking CompileTask. Since there is only one waiter ever
1604  // waiting on a CompileTask, we know that no one else will
1605  // be using this CompileTask; we can free it.
1606  CompileTask::free(task);
1607}
1608
1609/**
1610 * Initialize compiler thread(s) + compiler object(s). The postcondition
1611 * of this function is that the compiler runtimes are initialized and that
1612 * compiler threads can start compiling.
1613 */
1614bool CompileBroker::init_compiler_runtime() {
1615  CompilerThread* thread = CompilerThread::current();
1616  AbstractCompiler* comp = thread->compiler();
1617  // Final sanity check - the compiler object must exist
1618  guarantee(comp != NULL, "Compiler object must exist");
1619
1620  int system_dictionary_modification_counter;
1621  {
1622    MutexLocker locker(Compile_lock, thread);
1623    system_dictionary_modification_counter = SystemDictionary::number_of_modifications();
1624  }
1625
1626  {
1627    // Must switch to native to allocate ci_env
1628    ThreadToNativeFromVM ttn(thread);
1629    ciEnv ci_env(NULL, system_dictionary_modification_counter);
1630    // Cache Jvmti state
1631    ci_env.cache_jvmti_state();
1632    // Cache DTrace flags
1633    ci_env.cache_dtrace_flags();
1634
1635    // Switch back to VM state to do compiler initialization
1636    ThreadInVMfromNative tv(thread);
1637    ResetNoHandleMark rnhm;
1638
1639
1640    if (!comp->is_shark()) {
1641      // Perform per-thread and global initializations
1642      comp->initialize();
1643    }
1644  }
1645
1646  if (comp->is_failed()) {
1647    disable_compilation_forever();
1648    // If compiler initialization failed, no compiler thread that is specific to a
1649    // particular compiler runtime will ever start to compile methods.
1650    shutdown_compiler_runtime(comp, thread);
1651    return false;
1652  }
1653
1654  // C1 specific check
1655  if (comp->is_c1() && (thread->get_buffer_blob() == NULL)) {
1656    warning("Initialization of %s thread failed (no space to run compilers)", thread->name());
1657    return false;
1658  }
1659
1660  return true;
1661}
1662
1663/**
1664 * If C1 and/or C2 initialization failed, we shut down all compilation.
1665 * We do this to keep things simple. This can be changed if it ever turns
1666 * out to be a problem.
1667 */
1668void CompileBroker::shutdown_compiler_runtime(AbstractCompiler* comp, CompilerThread* thread) {
1669  // Free buffer blob, if allocated
1670  if (thread->get_buffer_blob() != NULL) {
1671    MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
1672    CodeCache::free(thread->get_buffer_blob());
1673  }
1674
1675  if (comp->should_perform_shutdown()) {
1676    // There are two reasons for shutting down the compiler
1677    // 1) compiler runtime initialization failed
1678    // 2) The code cache is full and the following flag is set: -XX:-UseCodeCacheFlushing
1679    warning("%s initialization failed. Shutting down all compilers", comp->name());
1680
1681    // Only one thread per compiler runtime object enters here
1682    // Set state to shut down
1683    comp->set_shut_down();
1684
1685    // Delete all queued compilation tasks to make compiler threads exit faster.
1686    if (_c1_compile_queue != NULL) {
1687      _c1_compile_queue->free_all();
1688    }
1689
1690    if (_c2_compile_queue != NULL) {
1691      _c2_compile_queue->free_all();
1692    }
1693
1694    // Set flags so that we continue execution with using interpreter only.
1695    UseCompiler    = false;
1696    UseInterpreter = true;
1697
1698    // We could delete compiler runtimes also. However, there are references to
1699    // the compiler runtime(s) (e.g.,  nmethod::is_compiled_by_c1()) which then
1700    // fail. This can be done later if necessary.
1701  }
1702}
1703
1704// ------------------------------------------------------------------
1705// CompileBroker::compiler_thread_loop
1706//
1707// The main loop run by a CompilerThread.
1708void CompileBroker::compiler_thread_loop() {
1709  CompilerThread* thread = CompilerThread::current();
1710  CompileQueue* queue = thread->queue();
1711  // For the thread that initializes the ciObjectFactory
1712  // this resource mark holds all the shared objects
1713  ResourceMark rm;
1714
1715  // First thread to get here will initialize the compiler interface
1716
1717  if (!ciObjectFactory::is_initialized()) {
1718    ASSERT_IN_VM;
1719    MutexLocker only_one (CompileThread_lock, thread);
1720    if (!ciObjectFactory::is_initialized()) {
1721      ciObjectFactory::initialize();
1722    }
1723  }
1724
1725  // Open a log.
1726  if (LogCompilation) {
1727    init_compiler_thread_log();
1728  }
1729  CompileLog* log = thread->log();
1730  if (log != NULL) {
1731    log->begin_elem("start_compile_thread name='%s' thread='" UINTX_FORMAT "' process='%d'",
1732                    thread->name(),
1733                    os::current_thread_id(),
1734                    os::current_process_id());
1735    log->stamp();
1736    log->end_elem();
1737  }
1738
1739  // If compiler thread/runtime initialization fails, exit the compiler thread
1740  if (!init_compiler_runtime()) {
1741    return;
1742  }
1743
1744  // Poll for new compilation tasks as long as the JVM runs. Compilation
1745  // should only be disabled if something went wrong while initializing the
1746  // compiler runtimes. This, in turn, should not happen. The only known case
1747  // when compiler runtime initialization fails is if there is not enough free
1748  // space in the code cache to generate the necessary stubs, etc.
1749  while (!is_compilation_disabled_forever()) {
1750    // We need this HandleMark to avoid leaking VM handles.
1751    HandleMark hm(thread);
1752
1753    CompileTask* task = queue->get();
1754    if (task == NULL) {
1755      continue;
1756    }
1757
1758    // Give compiler threads an extra quanta.  They tend to be bursty and
1759    // this helps the compiler to finish up the job.
1760    if (CompilerThreadHintNoPreempt) {
1761      os::hint_no_preempt();
1762    }
1763
1764    // trace per thread time and compile statistics
1765    CompilerCounters* counters = ((CompilerThread*)thread)->counters();
1766    PerfTraceTimedEvent(counters->time_counter(), counters->compile_counter());
1767
1768    // Assign the task to the current thread.  Mark this compilation
1769    // thread as active for the profiler.
1770    CompileTaskWrapper ctw(task);
1771    nmethodLocker result_handle;  // (handle for the nmethod produced by this task)
1772    task->set_code_handle(&result_handle);
1773    methodHandle method(thread, task->method());
1774
1775    // Never compile a method if breakpoints are present in it
1776    if (method()->number_of_breakpoints() == 0) {
1777      // Compile the method.
1778      if ((UseCompiler || AlwaysCompileLoopMethods) && CompileBroker::should_compile_new_jobs()) {
1779        invoke_compiler_on_method(task);
1780      } else {
1781        // After compilation is disabled, remove remaining methods from queue
1782        method->clear_queued_for_compilation();
1783        task->set_failure_reason("compilation is disabled");
1784      }
1785    }
1786  }
1787
1788  // Shut down compiler runtime
1789  shutdown_compiler_runtime(thread->compiler(), thread);
1790}
1791
1792// ------------------------------------------------------------------
1793// CompileBroker::init_compiler_thread_log
1794//
1795// Set up state required by +LogCompilation.
1796void CompileBroker::init_compiler_thread_log() {
1797    CompilerThread* thread = CompilerThread::current();
1798    char  file_name[4*K];
1799    FILE* fp = NULL;
1800    intx thread_id = os::current_thread_id();
1801    for (int try_temp_dir = 1; try_temp_dir >= 0; try_temp_dir--) {
1802      const char* dir = (try_temp_dir ? os::get_temp_directory() : NULL);
1803      if (dir == NULL) {
1804        jio_snprintf(file_name, sizeof(file_name), "hs_c" UINTX_FORMAT "_pid%u.log",
1805                     thread_id, os::current_process_id());
1806      } else {
1807        jio_snprintf(file_name, sizeof(file_name),
1808                     "%s%shs_c" UINTX_FORMAT "_pid%u.log", dir,
1809                     os::file_separator(), thread_id, os::current_process_id());
1810      }
1811
1812      fp = fopen(file_name, "wt");
1813      if (fp != NULL) {
1814        if (LogCompilation && Verbose) {
1815          tty->print_cr("Opening compilation log %s", file_name);
1816        }
1817        CompileLog* log = new(ResourceObj::C_HEAP, mtCompiler) CompileLog(file_name, fp, thread_id);
1818        thread->init_log(log);
1819
1820        if (xtty != NULL) {
1821          ttyLocker ttyl;
1822          // Record any per thread log files
1823          xtty->elem("thread_logfile thread='" INTX_FORMAT "' filename='%s'", thread_id, file_name);
1824        }
1825        return;
1826      }
1827    }
1828    warning("Cannot open log file: %s", file_name);
1829}
1830
1831void CompileBroker::log_metaspace_failure() {
1832  const char* message = "some methods may not be compiled because metaspace "
1833                        "is out of memory";
1834  if (_compilation_log != NULL) {
1835    _compilation_log->log_metaspace_failure(message);
1836  }
1837  if (PrintCompilation) {
1838    tty->print_cr("COMPILE PROFILING SKIPPED: %s", message);
1839  }
1840}
1841
1842
1843// ------------------------------------------------------------------
1844// CompileBroker::set_should_block
1845//
1846// Set _should_block.
1847// Call this from the VM, with Threads_lock held and a safepoint requested.
1848void CompileBroker::set_should_block() {
1849  assert(Threads_lock->owner() == Thread::current(), "must have threads lock");
1850  assert(SafepointSynchronize::is_at_safepoint(), "must be at a safepoint already");
1851#ifndef PRODUCT
1852  if (PrintCompilation && (Verbose || WizardMode))
1853    tty->print_cr("notifying compiler thread pool to block");
1854#endif
1855  _should_block = true;
1856}
1857
1858// ------------------------------------------------------------------
1859// CompileBroker::maybe_block
1860//
1861// Call this from the compiler at convenient points, to poll for _should_block.
1862void CompileBroker::maybe_block() {
1863  if (_should_block) {
1864#ifndef PRODUCT
1865    if (PrintCompilation && (Verbose || WizardMode))
1866      tty->print_cr("compiler thread " INTPTR_FORMAT " poll detects block request", p2i(Thread::current()));
1867#endif
1868    ThreadInVMfromNative tivfn(JavaThread::current());
1869  }
1870}
1871
1872// wrapper for CodeCache::print_summary()
1873static void codecache_print(bool detailed)
1874{
1875  ResourceMark rm;
1876  stringStream s;
1877  // Dump code cache  into a buffer before locking the tty,
1878  {
1879    MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
1880    CodeCache::print_summary(&s, detailed);
1881  }
1882  ttyLocker ttyl;
1883  tty->print("%s", s.as_string());
1884}
1885
1886// ------------------------------------------------------------------
1887// CompileBroker::invoke_compiler_on_method
1888//
1889// Compile a method.
1890//
1891void CompileBroker::invoke_compiler_on_method(CompileTask* task) {
1892  if (PrintCompilation) {
1893    ResourceMark rm;
1894    task->print_tty();
1895  }
1896  elapsedTimer time;
1897
1898  CompilerThread* thread = CompilerThread::current();
1899  ResourceMark rm(thread);
1900
1901  if (LogEvents) {
1902    _compilation_log->log_compile(thread, task);
1903  }
1904
1905  // Common flags.
1906  uint compile_id = task->compile_id();
1907  int osr_bci = task->osr_bci();
1908  bool is_osr = (osr_bci != standard_entry_bci);
1909  bool should_log = (thread->log() != NULL);
1910  bool should_break = false;
1911  int task_level = task->comp_level();
1912  {
1913    // create the handle inside it's own block so it can't
1914    // accidentally be referenced once the thread transitions to
1915    // native.  The NoHandleMark before the transition should catch
1916    // any cases where this occurs in the future.
1917    methodHandle method(thread, task->method());
1918    should_break = check_break_at(method, compile_id, is_osr);
1919    if (should_log && !CompilerOracle::should_log(method)) {
1920      should_log = false;
1921    }
1922    assert(!method->is_native(), "no longer compile natives");
1923
1924    // Save information about this method in case of failure.
1925    set_last_compile(thread, method, is_osr, task_level);
1926
1927    DTRACE_METHOD_COMPILE_BEGIN_PROBE(method, compiler_name(task_level));
1928  }
1929
1930  // Allocate a new set of JNI handles.
1931  push_jni_handle_block();
1932  Method* target_handle = task->method();
1933  int compilable = ciEnv::MethodCompilable;
1934  {
1935    int system_dictionary_modification_counter;
1936    {
1937      MutexLocker locker(Compile_lock, thread);
1938      system_dictionary_modification_counter = SystemDictionary::number_of_modifications();
1939    }
1940
1941    NoHandleMark  nhm;
1942    ThreadToNativeFromVM ttn(thread);
1943
1944    ciEnv ci_env(task, system_dictionary_modification_counter);
1945    if (should_break) {
1946      ci_env.set_break_at_compile(true);
1947    }
1948    if (should_log) {
1949      ci_env.set_log(thread->log());
1950    }
1951    assert(thread->env() == &ci_env, "set by ci_env");
1952    // The thread-env() field is cleared in ~CompileTaskWrapper.
1953
1954    // Cache Jvmti state
1955    ci_env.cache_jvmti_state();
1956
1957    // Cache DTrace flags
1958    ci_env.cache_dtrace_flags();
1959
1960    ciMethod* target = ci_env.get_method_from_handle(target_handle);
1961
1962    TraceTime t1("compilation", &time);
1963    EventCompilation event;
1964
1965    AbstractCompiler *comp = compiler(task_level);
1966    if (comp == NULL) {
1967      ci_env.record_method_not_compilable("no compiler", !TieredCompilation);
1968    } else {
1969      if (WhiteBoxAPI && WhiteBox::compilation_locked) {
1970        MonitorLockerEx locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
1971        while (WhiteBox::compilation_locked) {
1972          locker.wait(Mutex::_no_safepoint_check_flag);
1973        }
1974      }
1975      comp->compile_method(&ci_env, target, osr_bci);
1976    }
1977
1978    if (!ci_env.failing() && task->code() == NULL) {
1979      //assert(false, "compiler should always document failure");
1980      // The compiler elected, without comment, not to register a result.
1981      // Do not attempt further compilations of this method.
1982      ci_env.record_method_not_compilable("compile failed", !TieredCompilation);
1983    }
1984
1985    // Copy this bit to the enclosing block:
1986    compilable = ci_env.compilable();
1987
1988    if (ci_env.failing()) {
1989      task->set_failure_reason(ci_env.failure_reason());
1990      ci_env.report_failure(ci_env.failure_reason());
1991      const char* retry_message = ci_env.retry_message();
1992      if (_compilation_log != NULL) {
1993        _compilation_log->log_failure(thread, task, ci_env.failure_reason(), retry_message);
1994      }
1995      if (PrintCompilation) {
1996        FormatBufferResource msg = retry_message != NULL ?
1997            err_msg_res("COMPILE SKIPPED: %s (%s)", ci_env.failure_reason(), retry_message) :
1998            err_msg_res("COMPILE SKIPPED: %s",      ci_env.failure_reason());
1999        task->print_compilation(tty, msg);
2000      }
2001    } else {
2002      task->mark_success();
2003      task->set_num_inlined_bytecodes(ci_env.num_inlined_bytecodes());
2004      if (_compilation_log != NULL) {
2005        nmethod* code = task->code();
2006        if (code != NULL) {
2007          _compilation_log->log_nmethod(thread, code);
2008        }
2009      }
2010    }
2011    // simulate crash during compilation
2012    assert(task->compile_id() != CICrashAt, "just as planned");
2013    if (event.should_commit()) {
2014      event.set_method(target->get_Method());
2015      event.set_compileID(compile_id);
2016      event.set_compileLevel(task->comp_level());
2017      event.set_succeded(task->is_success());
2018      event.set_isOsr(is_osr);
2019      event.set_codeSize((task->code() == NULL) ? 0 : task->code()->total_size());
2020      event.set_inlinedBytes(task->num_inlined_bytecodes());
2021      event.commit();
2022    }
2023  }
2024  pop_jni_handle_block();
2025
2026  methodHandle method(thread, task->method());
2027
2028  DTRACE_METHOD_COMPILE_END_PROBE(method, compiler_name(task_level), task->is_success());
2029
2030  collect_statistics(thread, time, task);
2031
2032  if (PrintCompilation && PrintCompilation2) {
2033    tty->print("%7d ", (int) tty->time_stamp().milliseconds());  // print timestamp
2034    tty->print("%4d ", compile_id);    // print compilation number
2035    tty->print("%s ", (is_osr ? "%" : " "));
2036    if (task->code() != NULL) {
2037      tty->print("size: %d(%d) ", task->code()->total_size(), task->code()->insts_size());
2038    }
2039    tty->print_cr("time: %d inlined: %d bytes", (int)time.milliseconds(), task->num_inlined_bytecodes());
2040  }
2041
2042  if (PrintCodeCacheOnCompilation)
2043    codecache_print(/* detailed= */ false);
2044
2045  // Disable compilation, if required.
2046  switch (compilable) {
2047  case ciEnv::MethodCompilable_never:
2048    if (is_osr)
2049      method->set_not_osr_compilable_quietly();
2050    else
2051      method->set_not_compilable_quietly();
2052    break;
2053  case ciEnv::MethodCompilable_not_at_tier:
2054    if (is_osr)
2055      method->set_not_osr_compilable_quietly(task_level);
2056    else
2057      method->set_not_compilable_quietly(task_level);
2058    break;
2059  }
2060
2061  // Note that the queued_for_compilation bits are cleared without
2062  // protection of a mutex. [They were set by the requester thread,
2063  // when adding the task to the compile queue -- at which time the
2064  // compile queue lock was held. Subsequently, we acquired the compile
2065  // queue lock to get this task off the compile queue; thus (to belabour
2066  // the point somewhat) our clearing of the bits must be occurring
2067  // only after the setting of the bits. See also 14012000 above.
2068  method->clear_queued_for_compilation();
2069
2070#ifdef ASSERT
2071  if (CollectedHeap::fired_fake_oom()) {
2072    // The current compile received a fake OOM during compilation so
2073    // go ahead and exit the VM since the test apparently succeeded
2074    tty->print_cr("*** Shutting down VM after successful fake OOM");
2075    vm_exit(0);
2076  }
2077#endif
2078}
2079
2080/**
2081 * The CodeCache is full. Print warning and disable compilation.
2082 * Schedule code cache cleaning so compilation can continue later.
2083 * This function needs to be called only from CodeCache::allocate(),
2084 * since we currently handle a full code cache uniformly.
2085 */
2086void CompileBroker::handle_full_code_cache(int code_blob_type) {
2087  UseInterpreter = true;
2088  if (UseCompiler || AlwaysCompileLoopMethods ) {
2089    if (xtty != NULL) {
2090      ResourceMark rm;
2091      stringStream s;
2092      // Dump code cache state into a buffer before locking the tty,
2093      // because log_state() will use locks causing lock conflicts.
2094      CodeCache::log_state(&s);
2095      // Lock to prevent tearing
2096      ttyLocker ttyl;
2097      xtty->begin_elem("code_cache_full");
2098      xtty->print("%s", s.as_string());
2099      xtty->stamp();
2100      xtty->end_elem();
2101    }
2102
2103#ifndef PRODUCT
2104    if (CompileTheWorld || ExitOnFullCodeCache) {
2105      codecache_print(/* detailed= */ true);
2106      before_exit(JavaThread::current());
2107      exit_globals(); // will delete tty
2108      vm_direct_exit(CompileTheWorld ? 0 : 1);
2109    }
2110#endif
2111    if (UseCodeCacheFlushing) {
2112      // Since code cache is full, immediately stop new compiles
2113      if (CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation)) {
2114        NMethodSweeper::log_sweep("disable_compiler");
2115      }
2116    } else {
2117      disable_compilation_forever();
2118    }
2119
2120    CodeCache::report_codemem_full(code_blob_type, should_print_compiler_warning());
2121  }
2122}
2123
2124// ------------------------------------------------------------------
2125// CompileBroker::set_last_compile
2126//
2127// Record this compilation for debugging purposes.
2128void CompileBroker::set_last_compile(CompilerThread* thread, methodHandle method, bool is_osr, int comp_level) {
2129  ResourceMark rm;
2130  char* method_name = method->name()->as_C_string();
2131  strncpy(_last_method_compiled, method_name, CompileBroker::name_buffer_length);
2132  _last_method_compiled[CompileBroker::name_buffer_length - 1] = '\0'; // ensure null terminated
2133  char current_method[CompilerCounters::cmname_buffer_length];
2134  size_t maxLen = CompilerCounters::cmname_buffer_length;
2135
2136  if (UsePerfData) {
2137    const char* class_name = method->method_holder()->name()->as_C_string();
2138
2139    size_t s1len = strlen(class_name);
2140    size_t s2len = strlen(method_name);
2141
2142    // check if we need to truncate the string
2143    if (s1len + s2len + 2 > maxLen) {
2144
2145      // the strategy is to lop off the leading characters of the
2146      // class name and the trailing characters of the method name.
2147
2148      if (s2len + 2 > maxLen) {
2149        // lop of the entire class name string, let snprintf handle
2150        // truncation of the method name.
2151        class_name += s1len; // null string
2152      }
2153      else {
2154        // lop off the extra characters from the front of the class name
2155        class_name += ((s1len + s2len + 2) - maxLen);
2156      }
2157    }
2158
2159    jio_snprintf(current_method, maxLen, "%s %s", class_name, method_name);
2160  }
2161
2162  if (CICountOSR && is_osr) {
2163    _last_compile_type = osr_compile;
2164  } else {
2165    _last_compile_type = normal_compile;
2166  }
2167  _last_compile_level = comp_level;
2168
2169  if (UsePerfData) {
2170    CompilerCounters* counters = thread->counters();
2171    counters->set_current_method(current_method);
2172    counters->set_compile_type((jlong)_last_compile_type);
2173  }
2174}
2175
2176
2177// ------------------------------------------------------------------
2178// CompileBroker::push_jni_handle_block
2179//
2180// Push on a new block of JNI handles.
2181void CompileBroker::push_jni_handle_block() {
2182  JavaThread* thread = JavaThread::current();
2183
2184  // Allocate a new block for JNI handles.
2185  // Inlined code from jni_PushLocalFrame()
2186  JNIHandleBlock* java_handles = thread->active_handles();
2187  JNIHandleBlock* compile_handles = JNIHandleBlock::allocate_block(thread);
2188  assert(compile_handles != NULL && java_handles != NULL, "should not be NULL");
2189  compile_handles->set_pop_frame_link(java_handles);  // make sure java handles get gc'd.
2190  thread->set_active_handles(compile_handles);
2191}
2192
2193
2194// ------------------------------------------------------------------
2195// CompileBroker::pop_jni_handle_block
2196//
2197// Pop off the current block of JNI handles.
2198void CompileBroker::pop_jni_handle_block() {
2199  JavaThread* thread = JavaThread::current();
2200
2201  // Release our JNI handle block
2202  JNIHandleBlock* compile_handles = thread->active_handles();
2203  JNIHandleBlock* java_handles = compile_handles->pop_frame_link();
2204  thread->set_active_handles(java_handles);
2205  compile_handles->set_pop_frame_link(NULL);
2206  JNIHandleBlock::release_block(compile_handles, thread); // may block
2207}
2208
2209
2210// ------------------------------------------------------------------
2211// CompileBroker::check_break_at
2212//
2213// Should the compilation break at the current compilation.
2214bool CompileBroker::check_break_at(methodHandle method, int compile_id, bool is_osr) {
2215  if (CICountOSR && is_osr && (compile_id == CIBreakAtOSR)) {
2216    return true;
2217  } else if( CompilerOracle::should_break_at(method) ) { // break when compiling
2218    return true;
2219  } else {
2220    return (compile_id == CIBreakAt);
2221  }
2222}
2223
2224// ------------------------------------------------------------------
2225// CompileBroker::collect_statistics
2226//
2227// Collect statistics about the compilation.
2228
2229void CompileBroker::collect_statistics(CompilerThread* thread, elapsedTimer time, CompileTask* task) {
2230  bool success = task->is_success();
2231  methodHandle method (thread, task->method());
2232  uint compile_id = task->compile_id();
2233  bool is_osr = (task->osr_bci() != standard_entry_bci);
2234  nmethod* code = task->code();
2235  CompilerCounters* counters = thread->counters();
2236
2237  assert(code == NULL || code->is_locked_by_vm(), "will survive the MutexLocker");
2238  MutexLocker locker(CompileStatistics_lock);
2239
2240  // _perf variables are production performance counters which are
2241  // updated regardless of the setting of the CITime and CITimeEach flags
2242  //
2243
2244  // account all time, including bailouts and failures in this counter;
2245  // C1 and C2 counters are counting both successful and unsuccessful compiles
2246  _t_total_compilation.add(time);
2247
2248  if (!success) {
2249    _total_bailout_count++;
2250    if (UsePerfData) {
2251      _perf_last_failed_method->set_value(counters->current_method());
2252      _perf_last_failed_type->set_value(counters->compile_type());
2253      _perf_total_bailout_count->inc();
2254    }
2255    _t_bailedout_compilation.add(time);
2256  } else if (code == NULL) {
2257    if (UsePerfData) {
2258      _perf_last_invalidated_method->set_value(counters->current_method());
2259      _perf_last_invalidated_type->set_value(counters->compile_type());
2260      _perf_total_invalidated_count->inc();
2261    }
2262    _total_invalidated_count++;
2263    _t_invalidated_compilation.add(time);
2264  } else {
2265    // Compilation succeeded
2266
2267    // update compilation ticks - used by the implementation of
2268    // java.lang.management.CompilationMBean
2269    _perf_total_compilation->inc(time.ticks());
2270    _peak_compilation_time = time.milliseconds() > _peak_compilation_time ? time.milliseconds() : _peak_compilation_time;
2271
2272    if (CITime) {
2273      if (is_osr) {
2274        _t_osr_compilation.add(time);
2275        _sum_osr_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
2276      } else {
2277        _t_standard_compilation.add(time);
2278        _sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes();
2279      }
2280    }
2281
2282    if (UsePerfData) {
2283      // save the name of the last method compiled
2284      _perf_last_method->set_value(counters->current_method());
2285      _perf_last_compile_type->set_value(counters->compile_type());
2286      _perf_last_compile_size->set_value(method->code_size() +
2287                                         task->num_inlined_bytecodes());
2288      if (is_osr) {
2289        _perf_osr_compilation->inc(time.ticks());
2290        _perf_sum_osr_bytes_compiled->inc(method->code_size() + task->num_inlined_bytecodes());
2291      } else {
2292        _perf_standard_compilation->inc(time.ticks());
2293        _perf_sum_standard_bytes_compiled->inc(method->code_size() + task->num_inlined_bytecodes());
2294      }
2295    }
2296
2297    if (CITimeEach) {
2298      float bytes_per_sec = 1.0 * (method->code_size() + task->num_inlined_bytecodes()) / time.seconds();
2299      tty->print_cr("%3d   seconds: %f bytes/sec : %f (bytes %d + %d inlined)",
2300                    compile_id, time.seconds(), bytes_per_sec, method->code_size(), task->num_inlined_bytecodes());
2301    }
2302
2303    // Collect counts of successful compilations
2304    _sum_nmethod_size      += code->total_size();
2305    _sum_nmethod_code_size += code->insts_size();
2306    _total_compile_count++;
2307
2308    if (UsePerfData) {
2309      _perf_sum_nmethod_size->inc(     code->total_size());
2310      _perf_sum_nmethod_code_size->inc(code->insts_size());
2311      _perf_total_compile_count->inc();
2312    }
2313
2314    if (is_osr) {
2315      if (UsePerfData) _perf_total_osr_compile_count->inc();
2316      _total_osr_compile_count++;
2317    } else {
2318      if (UsePerfData) _perf_total_standard_compile_count->inc();
2319      _total_standard_compile_count++;
2320    }
2321  }
2322  // set the current method for the thread to null
2323  if (UsePerfData) counters->set_current_method("");
2324}
2325
2326const char* CompileBroker::compiler_name(int comp_level) {
2327  AbstractCompiler *comp = CompileBroker::compiler(comp_level);
2328  if (comp == NULL) {
2329    return "no compiler";
2330  } else {
2331    return (comp->name());
2332  }
2333}
2334
2335void CompileBroker::print_times() {
2336  tty->cr();
2337  tty->print_cr("Accumulated compiler times");
2338  tty->print_cr("----------------------------------------------------------");
2339               //0000000000111111111122222222223333333333444444444455555555556666666666
2340               //0123456789012345678901234567890123456789012345678901234567890123456789
2341  tty->print_cr("  Total compilation time   : %7.3f s", CompileBroker::_t_total_compilation.seconds());
2342  tty->print_cr("    Standard compilation   : %7.3f s, Average : %2.3f s",
2343                CompileBroker::_t_standard_compilation.seconds(),
2344                CompileBroker::_t_standard_compilation.seconds() / CompileBroker::_total_standard_compile_count);
2345  tty->print_cr("    Bailed out compilation : %7.3f s, Average : %2.3f s",
2346                CompileBroker::_t_bailedout_compilation.seconds(),
2347                CompileBroker::_t_bailedout_compilation.seconds() / CompileBroker::_total_bailout_count);
2348  tty->print_cr("    On stack replacement   : %7.3f s, Average : %2.3f s",
2349                CompileBroker::_t_osr_compilation.seconds(),
2350                CompileBroker::_t_osr_compilation.seconds() / CompileBroker::_total_osr_compile_count);
2351  tty->print_cr("    Invalidated            : %7.3f s, Average : %2.3f s",
2352                CompileBroker::_t_invalidated_compilation.seconds(),
2353                CompileBroker::_t_invalidated_compilation.seconds() / CompileBroker::_total_invalidated_count);
2354
2355  AbstractCompiler *comp = compiler(CompLevel_simple);
2356  if (comp != NULL) {
2357    tty->cr();
2358    comp->print_timers();
2359  }
2360  comp = compiler(CompLevel_full_optimization);
2361  if (comp != NULL) {
2362    tty->cr();
2363    comp->print_timers();
2364  }
2365  tty->cr();
2366  tty->print_cr("  Total compiled methods    : %8d methods", CompileBroker::_total_compile_count);
2367  tty->print_cr("    Standard compilation    : %8d methods", CompileBroker::_total_standard_compile_count);
2368  tty->print_cr("    On stack replacement    : %8d methods", CompileBroker::_total_osr_compile_count);
2369  int tcb = CompileBroker::_sum_osr_bytes_compiled + CompileBroker::_sum_standard_bytes_compiled;
2370  tty->print_cr("  Total compiled bytecodes  : %8d bytes", tcb);
2371  tty->print_cr("    Standard compilation    : %8d bytes", CompileBroker::_sum_standard_bytes_compiled);
2372  tty->print_cr("    On stack replacement    : %8d bytes", CompileBroker::_sum_osr_bytes_compiled);
2373  int bps = (int)(tcb / CompileBroker::_t_total_compilation.seconds());
2374  tty->print_cr("  Average compilation speed : %8d bytes/s", bps);
2375  tty->cr();
2376  tty->print_cr("  nmethod code size         : %8d bytes", CompileBroker::_sum_nmethod_code_size);
2377  tty->print_cr("  nmethod total size        : %8d bytes", CompileBroker::_sum_nmethod_size);
2378}
2379
2380// Debugging output for failure
2381void CompileBroker::print_last_compile() {
2382  if ( _last_compile_level != CompLevel_none &&
2383       compiler(_last_compile_level) != NULL &&
2384       _last_method_compiled != NULL &&
2385       _last_compile_type != no_compile) {
2386    if (_last_compile_type == osr_compile) {
2387      tty->print_cr("Last parse:  [osr]%d+++(%d) %s",
2388                    _osr_compilation_id, _last_compile_level, _last_method_compiled);
2389    } else {
2390      tty->print_cr("Last parse:  %d+++(%d) %s",
2391                    _compilation_id, _last_compile_level, _last_method_compiled);
2392    }
2393  }
2394}
2395
2396
2397void CompileBroker::print_compiler_threads_on(outputStream* st) {
2398#ifndef PRODUCT
2399  st->print_cr("Compiler thread printing unimplemented.");
2400  st->cr();
2401#endif
2402}
2403