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