< prev index next >

src/share/vm/classfile/systemDictionary.cpp

Print this page
rev 8833 : 8064811: Use THEAD instead of CHECK_NULL in return statements
Summary: Backport from JDK9
Reviewed-by: dholmes, coffeys
rev 8856 : 8210094: Better loading of classloader classes
Reviewed-by: acorn, hseigel, ahgross, rhalade
rev 8876 : Merge
rev 8910 : full patch for jfr

*** 1,7 **** /* ! * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 992,1010 **** // already be present in the SystemDictionary, otherwise we would not // throw potential ClassFormatErrors. // // Note: "name" is updated. ! instanceKlassHandle k = ClassFileParser(st).parseClassFile(class_name, loader_data, protection_domain, host_klass, cp_patches, parsed_name, true, THREAD); ! if (host_klass.not_null() && k.not_null()) { assert(EnableInvokeDynamic, ""); // If it's anonymous, initialize it now, since nobody else will. --- 992,1011 ---- // already be present in the SystemDictionary, otherwise we would not // throw potential ClassFormatErrors. // // Note: "name" is updated. ! ClassFileParser parser(st); ! instanceKlassHandle k = parser.parseClassFile(class_name, loader_data, protection_domain, host_klass, cp_patches, parsed_name, true, THREAD); ! TRACE_KLASS_CREATION(k, parser, THREAD); if (host_klass.not_null() && k.not_null()) { assert(EnableInvokeDynamic, ""); // If it's anonymous, initialize it now, since nobody else will.
*** 1074,1089 **** // already be present in the SystemDictionary, otherwise we would not // throw potential ClassFormatErrors. // // Note: "name" is updated. ! instanceKlassHandle k = ClassFileParser(st).parseClassFile(class_name, loader_data, protection_domain, parsed_name, verify, THREAD); const char* pkg = "java/"; size_t pkglen = strlen(pkg); if (!HAS_PENDING_EXCEPTION && !class_loader.is_null() && --- 1075,1092 ---- // already be present in the SystemDictionary, otherwise we would not // throw potential ClassFormatErrors. // // Note: "name" is updated. ! ClassFileParser parser(st); ! instanceKlassHandle k = parser.parseClassFile(class_name, loader_data, protection_domain, parsed_name, verify, THREAD); + TRACE_KLASS_CREATION(k, parser, THREAD); const char* pkg = "java/"; size_t pkglen = strlen(pkg); if (!HAS_PENDING_EXCEPTION && !class_loader.is_null() &&
*** 1374,1383 **** --- 1377,1399 ---- // Class is not found or has the wrong name, return NULL return nh; } } + static void class_define_event(InstanceKlass* k, + const ClassLoaderData* def_cld) { + #if INCLUDE_TRACE + EventClassDefine event; + if (event.should_commit()) { + ResourceMark m; + event.set_definedClass(k); + event.set_definingClassLoader(def_cld); + event.commit(); + } + #endif // INCLUDE_TRACE + } + void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) { ClassLoaderData* loader_data = k->class_loader_data(); Handle class_loader_h(THREAD, loader_data->class_loader());
*** 1444,1453 **** --- 1460,1470 ---- assert(THREAD->is_Java_thread(), "thread->is_Java_thread()"); JvmtiExport::post_class_load((JavaThread *) THREAD, k()); } + class_define_event(k(), loader_data); } // Support parallel classloading // All parallel class loaders, including bootstrap classloader // lock a placeholder entry for this class/class_loader pair
*** 2681,2700 **** // utility function for class load event void SystemDictionary::post_class_load_event(const Ticks& start_time, instanceKlassHandle k, Handle initiating_loader) { #if INCLUDE_TRACE ! EventClassLoad event(UNTIMED); if (event.should_commit()) { - event.set_starttime(start_time); event.set_loadedClass(k()); ! oop defining_class_loader = k->class_loader(); ! event.set_definingClassLoader(defining_class_loader != NULL ? ! defining_class_loader->klass() : (Klass*)NULL); ! oop class_loader = initiating_loader.is_null() ? (oop)NULL : initiating_loader(); ! event.set_initiatingClassLoader(class_loader != NULL ? ! class_loader->klass() : (Klass*)NULL); event.commit(); } #endif // INCLUDE_TRACE } --- 2698,2712 ---- // utility function for class load event void SystemDictionary::post_class_load_event(const Ticks& start_time, instanceKlassHandle k, Handle initiating_loader) { #if INCLUDE_TRACE ! EventClassLoad event; if (event.should_commit()) { event.set_loadedClass(k()); ! event.set_definingClassLoader(k->class_loader_data()); ! event.set_initiatingClassLoader(ClassLoaderData::class_loader_data_or_null(initiating_loader())); event.commit(); } #endif // INCLUDE_TRACE }
< prev index next >