< 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.
// 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.
// 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 >