754 |
754 |
755 // common code for JVM_DefineClass() and JVM_DefineClassWithSource() |
755 // common code for JVM_DefineClass() and JVM_DefineClassWithSource() |
756 static jclass jvm_define_class_common(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source, TRAPS) { |
756 static jclass jvm_define_class_common(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source, TRAPS) { |
757 if (source == NULL) source = "__JVM_DefineClass__"; |
757 if (source == NULL) source = "__JVM_DefineClass__"; |
758 |
758 |
|
759 assert(THREAD->is_Java_thread(), "must be a JavaThread"); |
|
760 JavaThread* jt = (JavaThread*) THREAD; |
|
761 |
|
762 PerfClassTraceTime vmtimer(ClassLoader::perf_define_appclass_time(), |
|
763 ClassLoader::perf_define_appclass_selftime(), |
|
764 ClassLoader::perf_define_appclasses(), |
|
765 jt->get_thread_stat()->perf_recursion_counts_addr(), |
|
766 jt->get_thread_stat()->perf_timers_addr(), |
|
767 PerfClassTraceTime::DEFINE_CLASS); |
|
768 |
|
769 if (UsePerfData) { |
|
770 ClassLoader::perf_app_classfile_bytes_read()->inc(len); |
|
771 } |
|
772 |
759 // Since exceptions can be thrown, class initialization can take place |
773 // Since exceptions can be thrown, class initialization can take place |
760 // if name is NULL no check for class name in .class stream has to be made. |
774 // if name is NULL no check for class name in .class stream has to be made. |
761 symbolHandle class_name; |
775 symbolHandle class_name; |
762 if (name != NULL) { |
776 if (name != NULL) { |
763 const int str_len = (int)strlen(name); |
777 const int str_len = (int)strlen(name); |