< prev index next >

src/hotspot/share/oops/klass.hpp

   // java/lang/Class instance mirroring this class
   OopHandle _java_mirror;
   // Superclass
   Klass*      _super;
   // First subclass (NULL if none); _subklass->next_sibling() is next one
-  Klass*      _subklass;
+  Klass* volatile _subklass;
   // Sibling link (or NULL); links all subklasses of a klass
-  Klass*      _next_sibling;
+  Klass* volatile _next_sibling;
 
   // All klasses loaded by a class loader are chained through these links
   Klass*      _next_link;
 
   // The VM's representation of the ClassLoader used to load this class.

@@ -282,12 +282,13 // Note: for instances layout_helper() may include padding. // Use InstanceKlass::contains_field_offset to classify field offsets. // sub/superklass links - Klass* subklass() const { return _subklass; } - Klass* next_sibling() const { return _next_sibling; } + Klass* subklass(bool log = false) const; + Klass* next_sibling(bool log = false) const; + InstanceKlass* superklass() const; void append_to_sibling_list(); // add newly created receiver to superklass' subklass list void set_next_link(Klass* k) { _next_link = k; } Klass* next_link() const { return _next_link; } // The next klass defined by the class loader.
@@ -666,10 +667,12 // Load the klass's holder as a phantom. This is useful when a weak Klass // pointer has been "peeked" and then must be kept alive before it may // be used safely. oop holder_phantom() const; + void clean_subklass(); + static void clean_weak_klass_links(bool unloading_occurred, bool clean_alive_klasses = true); static void clean_subklass_tree() { clean_weak_klass_links(/*unloading_occurred*/ true , /* clean_alive_klasses */ false); }
< prev index next >