hotspot/src/share/vm/code/nmethod.cpp
changeset 8110 c992c8d52344
parent 8076 96d498ec7ae1
child 8495 a4959965eaa3
equal deleted inserted replaced
8109:26c288ddbec3 8110:c992c8d52344
    32 #include "compiler/compilerOracle.hpp"
    32 #include "compiler/compilerOracle.hpp"
    33 #include "compiler/disassembler.hpp"
    33 #include "compiler/disassembler.hpp"
    34 #include "interpreter/bytecode.hpp"
    34 #include "interpreter/bytecode.hpp"
    35 #include "oops/methodDataOop.hpp"
    35 #include "oops/methodDataOop.hpp"
    36 #include "prims/jvmtiRedefineClassesTrace.hpp"
    36 #include "prims/jvmtiRedefineClassesTrace.hpp"
       
    37 #include "prims/jvmtiImpl.hpp"
    37 #include "runtime/sharedRuntime.hpp"
    38 #include "runtime/sharedRuntime.hpp"
    38 #include "runtime/sweeper.hpp"
    39 #include "runtime/sweeper.hpp"
    39 #include "utilities/dtrace.hpp"
    40 #include "utilities/dtrace.hpp"
    40 #include "utilities/events.hpp"
    41 #include "utilities/events.hpp"
    41 #include "utilities/xmlstream.hpp"
    42 #include "utilities/xmlstream.hpp"
  1531       JvmtiExport::should_post_compiled_method_unload()) {
  1532       JvmtiExport::should_post_compiled_method_unload()) {
  1532     get_and_cache_jmethod_id();
  1533     get_and_cache_jmethod_id();
  1533   }
  1534   }
  1534 
  1535 
  1535   if (JvmtiExport::should_post_compiled_method_load()) {
  1536   if (JvmtiExport::should_post_compiled_method_load()) {
  1536     JvmtiExport::post_compiled_method_load(this);
  1537     // Let the Service thread (which is a real Java thread) post the event
       
  1538     MutexLockerEx ml(Service_lock, Mutex::_no_safepoint_check_flag);
       
  1539     JvmtiDeferredEventQueue::enqueue(
       
  1540       JvmtiDeferredEvent::compiled_method_load_event(this));
  1537   }
  1541   }
  1538 }
  1542 }
  1539 
  1543 
  1540 jmethodID nmethod::get_and_cache_jmethod_id() {
  1544 jmethodID nmethod::get_and_cache_jmethod_id() {
  1541   if (_jmethod_id == NULL) {
  1545   if (_jmethod_id == NULL) {
  1564   // that the jmethodID is a weak reference to the methodOop so if
  1568   // that the jmethodID is a weak reference to the methodOop so if
  1565   // it's being unloaded there's no way to look it up since the weak
  1569   // it's being unloaded there's no way to look it up since the weak
  1566   // ref will have been cleared.
  1570   // ref will have been cleared.
  1567   if (_jmethod_id != NULL && JvmtiExport::should_post_compiled_method_unload()) {
  1571   if (_jmethod_id != NULL && JvmtiExport::should_post_compiled_method_unload()) {
  1568     assert(!unload_reported(), "already unloaded");
  1572     assert(!unload_reported(), "already unloaded");
  1569     HandleMark hm;
  1573     JvmtiDeferredEvent event =
  1570     JvmtiExport::post_compiled_method_unload(_jmethod_id, insts_begin());
  1574       JvmtiDeferredEvent::compiled_method_unload_event(
       
  1575           _jmethod_id, insts_begin());
       
  1576     if (SafepointSynchronize::is_at_safepoint()) {
       
  1577       // Don't want to take the queueing lock. Add it as pending and
       
  1578       // it will get enqueued later.
       
  1579       JvmtiDeferredEventQueue::add_pending_event(event);
       
  1580     } else {
       
  1581       MutexLockerEx ml(Service_lock, Mutex::_no_safepoint_check_flag);
       
  1582       JvmtiDeferredEventQueue::enqueue(event);
       
  1583     }
  1571   }
  1584   }
  1572 
  1585 
  1573   // The JVMTI CompiledMethodUnload event can be enabled or disabled at
  1586   // The JVMTI CompiledMethodUnload event can be enabled or disabled at
  1574   // any time. As the nmethod is being unloaded now we mark it has
  1587   // any time. As the nmethod is being unloaded now we mark it has
  1575   // having the unload event reported - this will ensure that we don't
  1588   // having the unload event reported - this will ensure that we don't