< 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,145 ****
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);
}
--- 135,144 ----
*** 161,170 ****
--- 160,170 ----
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,199 ****
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));
writer->write(mark_symbol(klass, leakp));
writer->write(package_id(klass, leakp));
writer->write(get_flags(klass));
return 1;
}
int write__klass(JfrCheckpointWriter* writer, const void* k) {
assert(k != NULL, "invariant");
--- 186,201 ----
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));
! 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,554 ****
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
--- 546,555 ----
*** 602,612 ****
class CLDCallback : public CLDClosure {
public:
CLDCallback() {}
void do_cld(ClassLoaderData* cld) {
assert(cld != NULL, "invariant");
! if (cld->is_unsafe_anonymous()) {
return;
}
do_class_loader_data(cld);
}
};
--- 603,613 ----
class CLDCallback : public CLDClosure {
public:
CLDCallback() {}
void do_cld(ClassLoaderData* cld) {
assert(cld != NULL, "invariant");
! if (cld->has_class_mirror_holder()) {
return;
}
do_class_loader_data(cld);
}
};
< prev index next >