< prev index next >
src/hotspot/share/jfr/recorder/checkpoint/types/jfrTypeSet.cpp
Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com
@@ -135,11 +135,10 @@
return METHOD_ID(klass, method);
}
static traceid cld_id(CldPtr cld, bool leakp) {
assert(cld != NULL, "invariant");
- assert(!cld->is_unsafe_anonymous(), "invariant");
if (leakp) {
SET_LEAKP(cld);
} else {
SET_TRANSIENT(cld);
}
@@ -161,10 +160,11 @@
static ClassLoaderData* get_cld(const Klass* klass) {
assert(klass != NULL, "invariant");
if (klass->is_objArray_klass()) {
klass = ObjArrayKlass::cast(klass)->bottom_klass();
}
+ if (klass->is_hidden_weak()) return NULL;
return is_unsafe_anonymous(klass) ?
InstanceKlass::cast(klass)->unsafe_anonymous_host()->class_loader_data() : klass->class_loader_data();
}
template <typename T>
@@ -186,14 +186,16 @@
static int write_klass(JfrCheckpointWriter* writer, KlassPtr klass, bool leakp) {
assert(writer != NULL, "invariant");
assert(_artifacts != NULL, "invariant");
assert(klass != NULL, "invariant");
writer->write(artifact_id(klass));
- writer->write(cld_id(get_cld(klass), leakp));
+ ClassLoaderData* cld = get_cld(klass);
+ writer->write(cld != NULL ? cld_id(cld, leakp) : 0);
writer->write(mark_symbol(klass, leakp));
writer->write(package_id(klass, leakp));
writer->write(get_flags(klass));
+ writer->write<bool>(klass->is_hidden());
return 1;
}
int write__klass(JfrCheckpointWriter* writer, const void* k) {
assert(k != NULL, "invariant");
@@ -544,11 +546,10 @@
do_modules();
}
static int write_classloader(JfrCheckpointWriter* writer, CldPtr cld, bool leakp) {
assert(cld != NULL, "invariant");
- assert(!cld->is_unsafe_anonymous(), "invariant");
// class loader type
const Klass* class_loader_klass = cld->class_loader_klass();
if (class_loader_klass == NULL) {
// (primordial) boot class loader
writer->write(artifact_id(cld)); // class loader instance id
@@ -602,11 +603,11 @@
class CLDCallback : public CLDClosure {
public:
CLDCallback() {}
void do_cld(ClassLoaderData* cld) {
assert(cld != NULL, "invariant");
- if (cld->is_unsafe_anonymous()) {
+ if (cld->has_class_mirror_holder()) {
return;
}
do_class_loader_data(cld);
}
};
< prev index next >