void ClassLoadingService::notify_class_loaded(instanceKlass* k, bool shared_class) { DTRACE_CLASSLOAD_PROBE(loaded, k, shared_class); PerfCounter* classes_counter = (shared_class ? _shared_classes_loaded_count : _classes_loaded_count); // increment the count classes_counter->inc(); if (UsePerfData) { PerfCounter* classbytes_counter = (shared_class ? _shared_classbytes_loaded : _classbytes_loaded); // add the class size size_t size = compute_class_size(k); classbytes_counter->inc(size); } }
void ClassLoadingService::notify_class_unloaded(instanceKlass* k) { DTRACE_CLASSLOAD_PROBE(unloaded, k, false); // Classes that can be unloaded must be non-shared _classes_unloaded_count->inc(); if (UsePerfData) { // add the class size size_t size = compute_class_size(k); _classbytes_unloaded->inc(size); // Compute method size & subtract from running total. // We are called during phase 1 of mark sweep, so it's // still ok to iterate through methodOops here. objArrayOop methods = k->methods(); for (int i = 0; i < methods->length(); i++) { _class_methods_size->inc(-methods->obj_at(i)->size()); } } if (TraceClassUnloading) { ResourceMark rm; tty->print_cr("[Unloading class %s]", k->external_name()); } }
void ClassLoadingService::notify_class_unloaded(InstanceKlass* k) { DTRACE_CLASSLOAD_PROBE(unloaded, k, false); // Classes that can be unloaded must be non-shared _classes_unloaded_count->inc(); if (UsePerfData) { // add the class size size_t size = compute_class_size(k); _classbytes_unloaded->inc(size); // Compute method size & subtract from running total. // We are called during phase 1 of mark sweep, so it's // still ok to iterate through Method*s here. Array<Method*>* methods = k->methods(); for (int i = 0; i < methods->length(); i++) { _class_methods_size->inc(-methods->at(i)->size()); } } if (log_is_enabled(Info, classunload)) { ResourceMark rm; log_info(classunload)("unloading class %s " INTPTR_FORMAT , k->external_name(), p2i(k)); } }