src/share/vm/trace/traceStream.hpp
Print this page
rev 12364 : 8170672: Event-based tracing to support classloader instances
Reviewed-by:
@@ -25,10 +25,12 @@
#ifndef SHARE_VM_TRACE_TRACESTREAM_HPP
#define SHARE_VM_TRACE_TRACESTREAM_HPP
#include "utilities/macros.hpp"
#if INCLUDE_TRACE
+#include "classfile/classLoaderData.hpp"
+#include "classfile/javaClasses.inline.hpp"
#include "memory/resourceArea.hpp"
#include "oops/klass.hpp"
#include "oops/method.hpp"
#include "oops/symbol.hpp"
#include "utilities/ostream.hpp"
@@ -99,10 +101,37 @@
description = val->name_and_sig_as_C_string();
}
_st.print("%s = %s", label, description);
}
+ void print_val(const char* label, const ClassLoaderData* const cld) {
+ ResourceMark rm;
+ if (cld == NULL || cld->is_anonymous()) {
+ _st.print("%s = NULL", label);
+ return;
+ }
+ const oop class_loader_oop = cld->class_loader();
+ if (class_loader_oop == NULL) {
+ _st.print("%s = NULL", label);
+ return;
+ }
+ const char* class_loader_name = "NULL";
+ const char* klass_name = "NULL";
+ const oop class_loader_name_oop =
+ java_lang_ClassLoader::name(class_loader_oop);
+ if (class_loader_name_oop != NULL) {
+ class_loader_name =
+ java_lang_String::as_utf8_string(class_loader_name_oop);
+ }
+ const Klass* const k = class_loader_oop->klass();
+ const Symbol* klass_name_sym = k->name();
+ if (klass_name_sym != NULL) {
+ klass_name = klass_name_sym->as_C_string();
+ }
+ _st.print("%s = name=%s class=%s", label, class_loader_name, klass_name);
+ }
+
void print_val(const char* label, const char* val) {
_st.print("%s = '%s'", label, val);
}
void print(const char* val) {