< prev index next >

src/hotspot/share/classfile/classLoaderData.hpp

Print this page
rev 47409 : [mq]: review_comments_erik_and_david
rev 47322 : 8186777: Make Klass::_java_mirror an OopHandle
Summary: Add indirection for fetching mirror so that GC doesn't have to follow CLD::_klasses
Reviewed-by: hseigel, thartmann, eosterlund, stefank
Contributed-by: coleen.phillimore@oracle.com, rickard.backman@oracle.com
rev 47216 : 8187443: Forest Consolidation: Move files to unified layout
Reviewed-by: darcy, ihse


 177     Dependencies() : _list_head(NULL) {}
 178     Dependencies(TRAPS) : _list_head(NULL) {
 179       init(CHECK);
 180     }
 181     void add(Handle dependency, TRAPS);
 182     void init(TRAPS);
 183     void oops_do(OopClosure* f);
 184   };
 185 
 186   class ChunkedHandleList VALUE_OBJ_CLASS_SPEC {
 187     struct Chunk : public CHeapObj<mtClass> {
 188       static const size_t CAPACITY = 32;
 189 
 190       oop _data[CAPACITY];
 191       volatile juint _size;
 192       Chunk* _next;
 193 
 194       Chunk(Chunk* c) : _next(c), _size(0) { }
 195     };
 196 
 197     Chunk* _head;
 198 
 199     void oops_do_chunk(OopClosure* f, Chunk* c, const juint size);
 200 
 201    public:
 202     ChunkedHandleList() : _head(NULL) {}
 203     ~ChunkedHandleList();
 204 
 205     // Only one thread at a time can add, guarded by ClassLoaderData::metaspace_lock().
 206     // However, multiple threads can execute oops_do concurrently with add.
 207     oop* add(oop o);
 208 #ifdef ASSERT
 209     bool contains(oop* p);
 210 #endif
 211     void oops_do(OopClosure* f);
 212   };
 213 
 214   friend class ClassLoaderDataGraph;
 215   friend class ClassLoaderDataGraphKlassIteratorAtomic;
 216   friend class ClassLoaderDataGraphKlassIteratorStatic;
 217   friend class ClassLoaderDataGraphMetaspaceIterator;




 177     Dependencies() : _list_head(NULL) {}
 178     Dependencies(TRAPS) : _list_head(NULL) {
 179       init(CHECK);
 180     }
 181     void add(Handle dependency, TRAPS);
 182     void init(TRAPS);
 183     void oops_do(OopClosure* f);
 184   };
 185 
 186   class ChunkedHandleList VALUE_OBJ_CLASS_SPEC {
 187     struct Chunk : public CHeapObj<mtClass> {
 188       static const size_t CAPACITY = 32;
 189 
 190       oop _data[CAPACITY];
 191       volatile juint _size;
 192       Chunk* _next;
 193 
 194       Chunk(Chunk* c) : _next(c), _size(0) { }
 195     };
 196 
 197     Chunk* volatile _head;
 198 
 199     void oops_do_chunk(OopClosure* f, Chunk* c, const juint size);
 200 
 201    public:
 202     ChunkedHandleList() : _head(NULL) {}
 203     ~ChunkedHandleList();
 204 
 205     // Only one thread at a time can add, guarded by ClassLoaderData::metaspace_lock().
 206     // However, multiple threads can execute oops_do concurrently with add.
 207     oop* add(oop o);
 208 #ifdef ASSERT
 209     bool contains(oop* p);
 210 #endif
 211     void oops_do(OopClosure* f);
 212   };
 213 
 214   friend class ClassLoaderDataGraph;
 215   friend class ClassLoaderDataGraphKlassIteratorAtomic;
 216   friend class ClassLoaderDataGraphKlassIteratorStatic;
 217   friend class ClassLoaderDataGraphMetaspaceIterator;


< prev index next >