src/hotspot/share/classfile/classLoaderData.hpp
changeset 50113 caf115bb98ad
parent 49824 e242740a92b8
child 50302 fd2fccf3b079
equal deleted inserted replaced
50112:7a2a740815b7 50113:caf115bb98ad
    29 #include "memory/memRegion.hpp"
    29 #include "memory/memRegion.hpp"
    30 #include "memory/metaspace.hpp"
    30 #include "memory/metaspace.hpp"
    31 #include "oops/oopHandle.hpp"
    31 #include "oops/oopHandle.hpp"
    32 #include "oops/weakHandle.hpp"
    32 #include "oops/weakHandle.hpp"
    33 #include "runtime/mutex.hpp"
    33 #include "runtime/mutex.hpp"
    34 #include "trace/traceMacros.hpp"
       
    35 #include "utilities/growableArray.hpp"
    34 #include "utilities/growableArray.hpp"
    36 #include "utilities/macros.hpp"
    35 #include "utilities/macros.hpp"
    37 #if INCLUDE_TRACE
    36 #if INCLUDE_JFR
    38 #include "utilities/ticks.hpp"
    37 #include "jfr/support/jfrTraceIdExtension.hpp"
    39 #endif
    38 #endif
       
    39 
    40 
    40 
    41 //
    41 //
    42 // A class loader represents a linkset. Conceptually, a linkset identifies
    42 // A class loader represents a linkset. Conceptually, a linkset identifies
    43 // the complete transitive closure of resolved links that a dynamic linker can
    43 // the complete transitive closure of resolved links that a dynamic linker can
    44 // produce.
    44 // produce.
    83   static volatile size_t  _num_instance_classes;
    83   static volatile size_t  _num_instance_classes;
    84   static volatile size_t  _num_array_classes;
    84   static volatile size_t  _num_array_classes;
    85 
    85 
    86   static ClassLoaderData* add_to_graph(Handle class_loader, bool anonymous);
    86   static ClassLoaderData* add_to_graph(Handle class_loader, bool anonymous);
    87   static ClassLoaderData* add(Handle class_loader, bool anonymous);
    87   static ClassLoaderData* add(Handle class_loader, bool anonymous);
    88   static void post_class_unload_events();
       
    89  public:
    88  public:
    90   static ClassLoaderData* find_or_create(Handle class_loader);
    89   static ClassLoaderData* find_or_create(Handle class_loader);
    91   static void purge();
    90   static void purge();
    92   static void clear_claimed_marks();
    91   static void clear_claimed_marks();
    93   // oops do
    92   // oops do
   165   static inline void dec_array_classes(size_t count);
   164   static inline void dec_array_classes(size_t count);
   166 
   165 
   167 #ifndef PRODUCT
   166 #ifndef PRODUCT
   168   static bool contains_loader_data(ClassLoaderData* loader_data);
   167   static bool contains_loader_data(ClassLoaderData* loader_data);
   169 #endif
   168 #endif
   170 
       
   171 #if INCLUDE_TRACE
       
   172  private:
       
   173   static Ticks _class_unload_time;
       
   174   static void class_unload_event(Klass* const k);
       
   175 #endif
       
   176 };
   169 };
   177 
   170 
   178 // ClassLoaderData class
   171 // ClassLoaderData class
   179 
   172 
   180 class ClassLoaderData : public CHeapObj<mtClass> {
   173 class ClassLoaderData : public CHeapObj<mtClass> {
   266   ClassLoaderData* _next; /// Next loader_datas created
   259   ClassLoaderData* _next; /// Next loader_datas created
   267 
   260 
   268   // JFR support
   261   // JFR support
   269   Klass*  _class_loader_klass;
   262   Klass*  _class_loader_klass;
   270   Symbol* _class_loader_name;
   263   Symbol* _class_loader_name;
   271   TRACE_DEFINE_TRACE_ID_FIELD;
   264   JFR_ONLY(DEFINE_TRACE_ID_FIELD;)
   272 
   265 
   273   void set_next(ClassLoaderData* next) { _next = next; }
   266   void set_next(ClassLoaderData* next) { _next = next; }
   274   ClassLoaderData* next() const        { return _next; }
   267   ClassLoaderData* next() const        { return _next; }
   275 
   268 
   276   ClassLoaderData(Handle h_class_loader, bool is_anonymous);
   269   ClassLoaderData(Handle h_class_loader, bool is_anonymous);
   408   static ClassLoaderData* anonymous_class_loader_data(Handle loader);
   401   static ClassLoaderData* anonymous_class_loader_data(Handle loader);
   409 
   402 
   410 
   403 
   411   Klass* class_loader_klass() const { return _class_loader_klass; }
   404   Klass* class_loader_klass() const { return _class_loader_klass; }
   412   Symbol* class_loader_name() const { return _class_loader_name; }
   405   Symbol* class_loader_name() const { return _class_loader_name; }
   413   TRACE_DEFINE_TRACE_ID_METHODS;
   406   JFR_ONLY(DEFINE_TRACE_ID_METHODS;)
   414 };
   407 };
   415 
   408 
   416 // An iterator that distributes Klasses to parallel worker threads.
   409 // An iterator that distributes Klasses to parallel worker threads.
   417 class ClassLoaderDataGraphKlassIteratorAtomic : public StackObj {
   410 class ClassLoaderDataGraphKlassIteratorAtomic : public StackObj {
   418  Klass* volatile _next_klass;
   411  Klass* volatile _next_klass;