hotspot/src/share/vm/code/nmethod.cpp
changeset 5896 c60924a89622
parent 5882 6b2aecc4f7d8
child 5924 dc9d04930c82
equal deleted inserted replaced
5895:7127e98012e3 5896:c60924a89622
   582 
   582 
   583     NOT_PRODUCT(_has_debug_info = false);
   583     NOT_PRODUCT(_has_debug_info = false);
   584     _oops_do_mark_link       = NULL;
   584     _oops_do_mark_link       = NULL;
   585     _method                  = method;
   585     _method                  = method;
   586     _entry_bci               = InvocationEntryBci;
   586     _entry_bci               = InvocationEntryBci;
       
   587     _jmethod_id              = NULL;
   587     _osr_link                = NULL;
   588     _osr_link                = NULL;
   588     _scavenge_root_link      = NULL;
   589     _scavenge_root_link      = NULL;
   589     _scavenge_root_state     = 0;
   590     _scavenge_root_state     = 0;
   590     _saved_nmethod_link      = NULL;
   591     _saved_nmethod_link      = NULL;
   591     _compiler                = NULL;
   592     _compiler                = NULL;
   675 
   676 
   676     NOT_PRODUCT(_has_debug_info = false);
   677     NOT_PRODUCT(_has_debug_info = false);
   677     _oops_do_mark_link       = NULL;
   678     _oops_do_mark_link       = NULL;
   678     _method                  = method;
   679     _method                  = method;
   679     _entry_bci               = InvocationEntryBci;
   680     _entry_bci               = InvocationEntryBci;
       
   681     _jmethod_id              = NULL;
   680     _osr_link                = NULL;
   682     _osr_link                = NULL;
   681     _scavenge_root_link      = NULL;
   683     _scavenge_root_link      = NULL;
   682     _scavenge_root_state     = 0;
   684     _scavenge_root_state     = 0;
   683     _compiler                = NULL;
   685     _compiler                = NULL;
   684     // We have no exception handler or deopt handler make the
   686     // We have no exception handler or deopt handler make the
   782     assert_locked_or_safepoint(CodeCache_lock);
   784     assert_locked_or_safepoint(CodeCache_lock);
   783 
   785 
   784     NOT_PRODUCT(_has_debug_info = false);
   786     NOT_PRODUCT(_has_debug_info = false);
   785     _oops_do_mark_link       = NULL;
   787     _oops_do_mark_link       = NULL;
   786     _method                  = method;
   788     _method                  = method;
       
   789     _jmethod_id              = NULL;
   787     _compile_id              = compile_id;
   790     _compile_id              = compile_id;
   788     _comp_level              = comp_level;
   791     _comp_level              = comp_level;
   789     _entry_bci               = entry_bci;
   792     _entry_bci               = entry_bci;
   790     _osr_link                = NULL;
   793     _osr_link                = NULL;
   791     _scavenge_root_link      = NULL;
   794     _scavenge_root_link      = NULL;
  1486       moop->name()->utf8_length(),
  1489       moop->name()->utf8_length(),
  1487       moop->signature()->bytes(),
  1490       moop->signature()->bytes(),
  1488       moop->signature()->utf8_length(),
  1491       moop->signature()->utf8_length(),
  1489       code_begin(), code_size());
  1492       code_begin(), code_size());
  1490 
  1493 
       
  1494   if (JvmtiExport::should_post_compiled_method_load() ||
       
  1495       JvmtiExport::should_post_compiled_method_unload()) {
       
  1496     get_and_cache_jmethod_id();
       
  1497   }
       
  1498 
  1491   if (JvmtiExport::should_post_compiled_method_load()) {
  1499   if (JvmtiExport::should_post_compiled_method_load()) {
  1492     JvmtiExport::post_compiled_method_load(this);
  1500     JvmtiExport::post_compiled_method_load(this);
  1493   }
  1501   }
       
  1502 }
       
  1503 
       
  1504 jmethodID nmethod::get_and_cache_jmethod_id() {
       
  1505   if (_jmethod_id == NULL) {
       
  1506     // Cache the jmethod_id since it can no longer be looked up once the
       
  1507     // method itself has been marked for unloading.
       
  1508     _jmethod_id = method()->jmethod_id();
       
  1509   }
       
  1510   return _jmethod_id;
  1494 }
  1511 }
  1495 
  1512 
  1496 void nmethod::post_compiled_method_unload() {
  1513 void nmethod::post_compiled_method_unload() {
  1497   if (unload_reported()) {
  1514   if (unload_reported()) {
  1498     // During unloading we transition to unloaded and then to zombie
  1515     // During unloading we transition to unloaded and then to zombie
  1502 
  1519 
  1503   assert(_method != NULL && !is_unloaded(), "just checking");
  1520   assert(_method != NULL && !is_unloaded(), "just checking");
  1504   DTRACE_METHOD_UNLOAD_PROBE(method());
  1521   DTRACE_METHOD_UNLOAD_PROBE(method());
  1505 
  1522 
  1506   // If a JVMTI agent has enabled the CompiledMethodUnload event then
  1523   // If a JVMTI agent has enabled the CompiledMethodUnload event then
  1507   // post the event. Sometime later this nmethod will be made a zombie by
  1524   // post the event. Sometime later this nmethod will be made a zombie
  1508   // the sweeper but the methodOop will not be valid at that point.
  1525   // by the sweeper but the methodOop will not be valid at that point.
  1509   if (JvmtiExport::should_post_compiled_method_unload()) {
  1526   // If the _jmethod_id is null then no load event was ever requested
       
  1527   // so don't bother posting the unload.  The main reason for this is
       
  1528   // that the jmethodID is a weak reference to the methodOop so if
       
  1529   // it's being unloaded there's no way to look it up since the weak
       
  1530   // ref will have been cleared.
       
  1531   if (_jmethod_id != NULL && JvmtiExport::should_post_compiled_method_unload()) {
  1510     assert(!unload_reported(), "already unloaded");
  1532     assert(!unload_reported(), "already unloaded");
  1511     HandleMark hm;
  1533     HandleMark hm;
  1512     JvmtiExport::post_compiled_method_unload(method()->jmethod_id(), code_begin());
  1534     JvmtiExport::post_compiled_method_unload(_jmethod_id, code_begin());
  1513   }
  1535   }
  1514 
  1536 
  1515   // The JVMTI CompiledMethodUnload event can be enabled or disabled at
  1537   // The JVMTI CompiledMethodUnload event can be enabled or disabled at
  1516   // any time. As the nmethod is being unloaded now we mark it has
  1538   // any time. As the nmethod is being unloaded now we mark it has
  1517   // having the unload event reported - this will ensure that we don't
  1539   // having the unload event reported - this will ensure that we don't