当前位置: 首页 > news >正文

openjdk17 jvm加载class文件,解析字段和方法,C++源码展示

##构造方法ClassFileParser,parse_stream解析文件流

ClassFileParser::ClassFileParser(ClassFileStream* stream,Symbol* name,ClassLoaderData* loader_data,const ClassLoadInfo* cl_info,Publicity pub_level,TRAPS) :_stream(stream),_class_name(NULL),_loader_data(loader_data),_is_hidden(cl_info->is_hidden()),_can_access_vm_annotations(cl_info->can_access_vm_annotations()),_orig_cp_size(0),_super_klass(),_cp(NULL),_fields(NULL),_methods(NULL),_inner_classes(NULL),_nest_members(NULL),_nest_host(0),_permitted_subclasses(NULL),_record_components(NULL),_local_interfaces(NULL),_transitive_interfaces(NULL),_combined_annotations(NULL),_class_annotations(NULL),_class_type_annotations(NULL),_fields_annotations(NULL),_fields_type_annotations(NULL),_klass(NULL),_klass_to_deallocate(NULL),_parsed_annotations(NULL),_fac(NULL),_field_info(NULL),_method_ordering(NULL),_all_mirandas(NULL),_vtable_size(0),_itable_size(0),_num_miranda_methods(0),_rt(REF_NONE),_protection_domain(cl_info->protection_domain()),_access_flags(),_pub_level(pub_level),_bad_constant_seen(0),_synthetic_flag(false),_sde_length(false),_sde_buffer(NULL),_sourcefile_index(0),_generic_signature_index(0),_major_version(0),_minor_version(0),_this_class_index(0),_super_class_index(0),_itfs_len(0),_java_fields_count(0),_need_verify(false),_relax_verify(false),_has_nonstatic_concrete_methods(false),_declares_nonstatic_concrete_methods(false),_has_final_method(false),_has_contended_fields(false),_has_finalizer(false),_has_empty_finalizer(false),_has_vanilla_constructor(false),_max_bootstrap_specifier_index(-1) {_class_name = name != NULL ? name : vmSymbols::unknown_class_name();_class_name->increment_refcount();assert(_loader_data != NULL, "invariant");assert(stream != NULL, "invariant");assert(_stream != NULL, "invariant");assert(_stream->buffer() == _stream->current(), "invariant");assert(_class_name != NULL, "invariant");assert(0 == _access_flags.as_int(), "invariant");// Figure out whether we can skip format checking (matching classic VM behavior)if (DumpSharedSpaces) {// verify == true means it's a 'remote' class (i.e., non-boot class)// Verification decision is based on BytecodeVerificationRemote flag// for those classes._need_verify = (stream->need_verify()) ? BytecodeVerificationRemote :BytecodeVerificationLocal;}else {_need_verify = Verifier::should_verify_for(_loader_data->class_loader(),stream->need_verify());}// synch back verification state to streamstream->set_verify(_need_verify);// Check if verification needs to be relaxed for this class file// Do not restrict it to jdk1.0 or jdk1.1 to maintain backward compatibility (4982376)_relax_verify = relax_format_check_for(_loader_data);parse_stream(stream, CHECK);post_process_parsed_stream(stream, _cp, CHECK);
}

 ##parse_stream方法

void ClassFileParser::parse_stream(const ClassFileStream* const stream,TRAPS) {assert(stream != NULL, "invariant");assert(_class_name != NULL, "invariant");// BEGIN STREAM PARSINGstream->guarantee_more(8, CHECK);  // magic, major, minor// Magic valueconst u4 magic = stream->get_u4_fast();guarantee_property(magic == JAVA_CLASSFILE_MAGIC,"Incompatible magic value %u in class file %s",magic, CHECK);// Version numbers_minor_version = stream->get_u2_fast();_major_version = stream->get_u2_fast();// Check version numbers - we check this even with verifier offverify_class_version(_major_version, _minor_version, _class_name, CHECK);stream->guarantee_more(3, CHECK); // length, first cp tagu2 cp_size = stream->get_u2_fast();guarantee_property(cp_size >= 1, "Illegal constant pool size %u in class file %s",cp_size, CHECK);_orig_cp_size = cp_size;if (is_hidden()) { // Add a slot for hidden class name.cp_size++;}_cp = ConstantPool::allocate(_loader_data,cp_size,CHECK);ConstantPool* const cp = _cp;parse_constant_pool(stream, cp, _orig_cp_size, CHECK);assert(cp_size == (const u2)cp->length(), "invariant");// ACCESS FLAGSstream->guarantee_more(8, CHECK);  // flags, this_class, super_class, infs_len// Access flagsjint flags;// JVM_ACC_MODULE is defined in JDK-9 and later.if (_major_version >= JAVA_9_VERSION) {flags = stream->get_u2_fast() & (JVM_RECOGNIZED_CLASS_MODIFIERS | JVM_ACC_MODULE);} else {flags = stream->get_u2_fast() & JVM_RECOGNIZED_CLASS_MODIFIERS;}if ((flags & JVM_ACC_INTERFACE) && _major_version < JAVA_6_VERSION) {// Set abstract bit for old class files for backward compatibilityflags |= JVM_ACC_ABSTRACT;}verify_legal_class_modifiers(flags, CHECK);short bad_constant = class_bad_constant_seen();if (bad_constant != 0) {// Do not throw CFE until after the access_flags are checked because if// ACC_MODULE is set in the access flags, then NCDFE must be thrown, not CFE.classfile_parse_error("Unknown constant tag %u in class file %s", bad_constant, THREAD);return;}_access_flags.set_flags(flags);// This class and superclass_this_class_index = stream->get_u2_fast();check_property(valid_cp_range(_this_class_index, cp_size) &&cp->tag_at(_this_class_index).is_unresolved_klass(),"Invalid this class index %u in constant pool in class file %s",_this_class_index, CHECK);Symbol* const class_name_in_cp = cp->klass_name_at(_this_class_index);assert(class_name_in_cp != NULL, "class_name can't be null");// Don't need to check whether this class name is legal or not.// It has been checked when constant pool is parsed.// However, make sure it is not an array type.if (_need_verify) {guarantee_property(class_name_in_cp->char_at(0) != JVM_SIGNATURE_ARRAY,"Bad class name in class file %s",CHECK);}#ifdef ASSERT// Basic sanity checksif (_is_hidden) {assert(_class_name != vmSymbols::unknown_class_name(), "hidden classes should have a special name");}
#endif// Update the _class_name as needed depending on whether this is a named, un-named, or hidden class.if (_is_hidden) {assert(_class_name != NULL, "Unexpected null _class_name");
#ifdef ASSERTif (_need_verify) {verify_legal_class_name(_class_name, CHECK);}
#endif} else {// Check if name in class file matches given nameif (_class_name != class_name_in_cp) {if (_class_name != vmSymbols::unknown_class_name()) {ResourceMark rm(THREAD);Exceptions::fthrow(THREAD_AND_LOCATION,vmSymbols::java_lang_NoClassDefFoundError(),"%s (wrong name: %s)",class_name_in_cp->as_C_string(),_class_name->as_C_string());return;} else {// The class name was not known by the caller so we set it from// the value in the CP.update_class_name(class_name_in_cp);}// else nothing to do: the expected class name matches what is in the CP}}// Verification prevents us from creating names with dots in them, this// asserts that that's the case.assert(is_internal_format(_class_name), "external class name format used internally");if (!is_internal()) {LogTarget(Debug, class, preorder) lt;if (lt.is_enabled()){ResourceMark rm(THREAD);LogStream ls(lt);ls.print("%s", _class_name->as_klass_external_name());if (stream->source() != NULL) {ls.print(" source: %s", stream->source());}ls.cr();}}// SUPERKLASS_super_class_index = stream->get_u2_fast();_super_klass = parse_super_class(cp,_super_class_index,_need_verify,CHECK);// Interfaces_itfs_len = stream->get_u2_fast();parse_interfaces(stream,_itfs_len,cp,&_has_nonstatic_concrete_methods,CHECK);assert(_local_interfaces != NULL, "invariant");// Fields (offsets are filled in later)_fac = new FieldAllocationCount();parse_fields(stream,_access_flags.is_interface(),_fac,cp,cp_size,&_java_fields_count,CHECK);assert(_fields != NULL, "invariant");// MethodsAccessFlags promoted_flags;parse_methods(stream,_access_flags.is_interface(),&promoted_flags,&_has_final_method,&_declares_nonstatic_concrete_methods,CHECK);assert(_methods != NULL, "invariant");// promote flags from parse_methods() to the klass' flags_access_flags.add_promoted_flags(promoted_flags.as_int());if (_declares_nonstatic_concrete_methods) {_has_nonstatic_concrete_methods = true;}// Additional attributes/annotations_parsed_annotations = new ClassAnnotationCollector();parse_classfile_attributes(stream, cp, _parsed_annotations, CHECK);assert(_inner_classes != NULL, "invariant");// Finalize the Annotations metadata object,// now that all annotation arrays have been created.create_combined_annotations(CHECK);// Make sure this is the end of class file streamguarantee_property(stream->at_eos(),"Extra bytes at the end of class file %s",CHECK);// all bytes in stream read and parsed
}

##parse_fields解析class文件字段

// Side-effects: populates the _fields, _fields_annotations,
// _fields_type_annotations fields
void ClassFileParser::parse_fields(const ClassFileStream* const cfs,bool is_interface,FieldAllocationCount* const fac,ConstantPool* cp,const int cp_size,u2* const java_fields_count_ptr,TRAPS) {assert(cfs != NULL, "invariant");assert(fac != NULL, "invariant");assert(cp != NULL, "invariant");assert(java_fields_count_ptr != NULL, "invariant");assert(NULL == _fields, "invariant");assert(NULL == _fields_annotations, "invariant");assert(NULL == _fields_type_annotations, "invariant");cfs->guarantee_more(2, CHECK);  // lengthconst u2 length = cfs->get_u2_fast();*java_fields_count_ptr = length;int num_injected = 0;const InjectedField* const injected = JavaClasses::get_injected(_class_name,&num_injected);const int total_fields = length + num_injected;// The field array starts with tuples of shorts// [access, name index, sig index, initial value index, byte offset].// A generic signature slot only exists for field with generic// signature attribute. And the access flag is set with// JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE for that field. The generic// signature slots are at the end of the field array and after all// other fields data.////   f1: [access, name index, sig index, initial value index, low_offset, high_offset]//   f2: [access, name index, sig index, initial value index, low_offset, high_offset]//       ...//   fn: [access, name index, sig index, initial value index, low_offset, high_offset]//       [generic signature index]//       [generic signature index]//       ...//// Allocate a temporary resource array for field data. For each field,// a slot is reserved in the temporary array for the generic signature// index. After parsing all fields, the data are copied to a permanent// array and any unused slots will be discarded.ResourceMark rm(THREAD);u2* const fa = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD,u2,total_fields * (FieldInfo::field_slots + 1));// The generic signature slots start after all other fields' data.int generic_signature_slot = total_fields * FieldInfo::field_slots;int num_generic_signature = 0;for (int n = 0; n < length; n++) {// access_flags, name_index, descriptor_index, attributes_countcfs->guarantee_more(8, CHECK);AccessFlags access_flags;const jint flags = cfs->get_u2_fast() & JVM_RECOGNIZED_FIELD_MODIFIERS;verify_legal_field_modifiers(flags, is_interface, CHECK);access_flags.set_flags(flags);const u2 name_index = cfs->get_u2_fast();check_property(valid_symbol_at(name_index),"Invalid constant pool index %u for field name in class file %s",name_index, CHECK);const Symbol* const name = cp->symbol_at(name_index);verify_legal_field_name(name, CHECK);const u2 signature_index = cfs->get_u2_fast();check_property(valid_symbol_at(signature_index),"Invalid constant pool index %u for field signature in class file %s",signature_index, CHECK);const Symbol* const sig = cp->symbol_at(signature_index);verify_legal_field_signature(name, sig, CHECK);u2 constantvalue_index = 0;bool is_synthetic = false;u2 generic_signature_index = 0;const bool is_static = access_flags.is_static();FieldAnnotationCollector parsed_annotations(_loader_data);const u2 attributes_count = cfs->get_u2_fast();if (attributes_count > 0) {parse_field_attributes(cfs,attributes_count,is_static,signature_index,&constantvalue_index,&is_synthetic,&generic_signature_index,&parsed_annotations,CHECK);if (parsed_annotations.field_annotations() != NULL) {if (_fields_annotations == NULL) {_fields_annotations = MetadataFactory::new_array<AnnotationArray*>(_loader_data, length, NULL,CHECK);}_fields_annotations->at_put(n, parsed_annotations.field_annotations());parsed_annotations.set_field_annotations(NULL);}if (parsed_annotations.field_type_annotations() != NULL) {if (_fields_type_annotations == NULL) {_fields_type_annotations =MetadataFactory::new_array<AnnotationArray*>(_loader_data,length,NULL,CHECK);}_fields_type_annotations->at_put(n, parsed_annotations.field_type_annotations());parsed_annotations.set_field_type_annotations(NULL);}if (is_synthetic) {access_flags.set_is_synthetic();}if (generic_signature_index != 0) {access_flags.set_field_has_generic_signature();fa[generic_signature_slot] = generic_signature_index;generic_signature_slot ++;num_generic_signature ++;}}FieldInfo* const field = FieldInfo::from_field_array(fa, n);field->initialize(access_flags.as_short(),name_index,signature_index,constantvalue_index);const BasicType type = cp->basic_type_for_signature_at(signature_index);// Update FieldAllocationCount for this kind of fieldfac->update(is_static, type);// After field is initialized with type, we can augment it with aux infoif (parsed_annotations.has_any_annotations()) {parsed_annotations.apply_to(field);if (field->is_contended()) {_has_contended_fields = true;}}}int index = length;if (num_injected != 0) {for (int n = 0; n < num_injected; n++) {// Check for duplicatesif (injected[n].may_be_java) {const Symbol* const name      = injected[n].name();const Symbol* const signature = injected[n].signature();bool duplicate = false;for (int i = 0; i < length; i++) {const FieldInfo* const f = FieldInfo::from_field_array(fa, i);if (name      == cp->symbol_at(f->name_index()) &&signature == cp->symbol_at(f->signature_index())) {// Symbol is desclared in Java so skip this oneduplicate = true;break;}}if (duplicate) {// These will be removed from the field array at the endcontinue;}}// Injected fieldFieldInfo* const field = FieldInfo::from_field_array(fa, index);field->initialize((u2)JVM_ACC_FIELD_INTERNAL,(u2)(injected[n].name_index),(u2)(injected[n].signature_index),0);const BasicType type = Signature::basic_type(injected[n].signature());// Update FieldAllocationCount for this kind of fieldfac->update(false, type);index++;}}assert(NULL == _fields, "invariant");_fields =MetadataFactory::new_array<u2>(_loader_data,index * FieldInfo::field_slots + num_generic_signature,CHECK);// Sometimes injected fields already exist in the Java source so// the fields array could be too long.  In that case the// fields array is trimed. Also unused slots that were reserved// for generic signature indexes are discarded.{int i = 0;for (; i < index * FieldInfo::field_slots; i++) {_fields->at_put(i, fa[i]);}for (int j = total_fields * FieldInfo::field_slots;j < generic_signature_slot; j++) {_fields->at_put(i++, fa[j]);}assert(_fields->length() == i, "");}if (_need_verify && length > 1) {// Check duplicated fieldsResourceMark rm(THREAD);NameSigHash** names_and_sigs = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, NameSigHash*, HASH_ROW_SIZE);initialize_hashtable(names_and_sigs);bool dup = false;const Symbol* name = NULL;const Symbol* sig = NULL;{debug_only(NoSafepointVerifier nsv;)for (AllFieldStream fs(_fields, cp); !fs.done(); fs.next()) {name = fs.name();sig = fs.signature();// If no duplicates, add name/signature in hashtable names_and_sigs.if (!put_after_lookup(name, sig, names_and_sigs)) {dup = true;break;}}}if (dup) {classfile_parse_error("Duplicate field name \"%s\" with signature \"%s\" in class file %s",name->as_C_string(), sig->as_klass_external_name(), THREAD);}}
}

##parse_methods解析class文件方法

// The promoted_flags parameter is used to pass relevant access_flags
// from the methods back up to the containing klass. These flag values
// are added to klass's access_flags.
// Side-effects: populates the _methods field in the parser
void ClassFileParser::parse_methods(const ClassFileStream* const cfs,bool is_interface,AccessFlags* promoted_flags,bool* has_final_method,bool* declares_nonstatic_concrete_methods,TRAPS) {assert(cfs != NULL, "invariant");assert(promoted_flags != NULL, "invariant");assert(has_final_method != NULL, "invariant");assert(declares_nonstatic_concrete_methods != NULL, "invariant");assert(NULL == _methods, "invariant");cfs->guarantee_more(2, CHECK);  // lengthconst u2 length = cfs->get_u2_fast();if (length == 0) {_methods = Universe::the_empty_method_array();} else {_methods = MetadataFactory::new_array<Method*>(_loader_data,length,NULL,CHECK);for (int index = 0; index < length; index++) {Method* method = parse_method(cfs,is_interface,_cp,promoted_flags,CHECK);if (method->is_final()) {*has_final_method = true;}// declares_nonstatic_concrete_methods: declares concrete instance methods, any access flags// used for interface initialization, and default method inheritance analysisif (is_interface && !(*declares_nonstatic_concrete_methods)&& !method->is_abstract() && !method->is_static()) {*declares_nonstatic_concrete_methods = true;}_methods->at_put(index, method);}if (_need_verify && length > 1) {// Check duplicated methodsResourceMark rm(THREAD);NameSigHash** names_and_sigs = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, NameSigHash*, HASH_ROW_SIZE);initialize_hashtable(names_and_sigs);bool dup = false;const Symbol* name = NULL;const Symbol* sig = NULL;{debug_only(NoSafepointVerifier nsv;)for (int i = 0; i < length; i++) {const Method* const m = _methods->at(i);name = m->name();sig = m->signature();// If no duplicates, add name/signature in hashtable names_and_sigs.if (!put_after_lookup(name, sig, names_and_sigs)) {dup = true;break;}}}if (dup) {classfile_parse_error("Duplicate method name \"%s\" with signature \"%s\" in class file %s",name->as_C_string(), sig->as_klass_external_name(), THREAD);}}}
}

##gdb调试堆栈,解析方法

#0  ClassFileParser::parse_methods (this=0x7ffff7bfddd0, cfs=0x7ffff0034bd0, is_interface=false, promoted_flags=0x7ffff7bfdb50, has_final_method=0x7ffff7bfdf6c,declares_nonstatic_concrete_methods=0x7ffff7bfdf6b, __the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classFileParser.cpp:2861
#1  0x00007ffff5fc2976 in ClassFileParser::parse_stream (this=0x7ffff7bfddd0, stream=0x7ffff0034bd0, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classFileParser.cpp:5859
#2  0x00007ffff5fc179d in ClassFileParser::ClassFileParser (this=0x7ffff7bfddd0, stream=0x7ffff0034bd0, name=0x7fffe04980f0, loader_data=0x7ffff00c61a0, cl_info=0x7ffff7bfe000,pub_level=ClassFileParser::BROADCAST, __the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classFileParser.cpp:5590
#3  0x00007ffff66337a3 in KlassFactory::create_from_stream (stream=0x7ffff0034bd0, name=0x7fffe04980f0, loader_data=0x7ffff00c61a0, cl_info=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/klassFactory.cpp:199
#4  0x00007ffff5fd2471 in ClassLoader::load_class (name=0x7fffe04980f0, search_append_only=false, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classLoader.cpp:1222
#5  0x00007ffff6b1066e in SystemDictionary::load_instance_class_impl (class_name=0x7fffe04980f0, class_loader=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:1290
#6  0x00007ffff6b10a49 in SystemDictionary::load_instance_class (name_hash=1549954608, name=0x7fffe04980f0, class_loader=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:1356
#7  0x00007ffff6b0eb11 in SystemDictionary::resolve_instance_class_or_null (name=0x7fffe04980f0, class_loader=..., protection_domain=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:724
#8  0x00007ffff6b0d696 in SystemDictionary::resolve_instance_class_or_null_helper (class_name=0x7fffe04980f0, class_loader=..., protection_domain=...,__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:295
#9  0x00007ffff6b0d53c in SystemDictionary::resolve_or_null (class_name=0x7fffe04980f0, class_loader=..., protection_domain=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:278
#10 0x00007ffff6b0d47f in SystemDictionary::resolve_or_fail (class_name=0x7fffe04980f0, class_loader=..., protection_domain=..., throw_error=true, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:264
#11 0x00007ffff5da8a1a in SystemDictionary::resolve_or_fail (class_name=0x7fffe04980f0, throw_error=true, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.hpp:100
#12 0x00007ffff6bf725e in vmClasses::resolve (id=vmClassID::Object_klass_knum, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/vmClasses.cpp:99
#13 0x00007ffff6bf735c in vmClasses::resolve_until (limit_id=vmClassID::Cloneable_klass_knum, start_id=@0x7ffff7bfe8f0: vmClassID::Object_klass_knum,__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/vmClasses.cpp:108
#14 0x00007ffff6bf7d60 in vmClasses::resolve_through (last_id=vmClassID::Class_klass_knum, start_id=@0x7ffff7bfe8f0: vmClassID::Object_klass_knum, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/vmClasses.hpp:64
#15 0x00007ffff6bf7508 in vmClasses::resolve_all (__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/vmClasses.cpp:151
#16 0x00007ffff6b1190a in SystemDictionary::initialize (__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:1654
#17 0x00007ffff6b968a1 in Universe::genesis (__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/memory/universe.cpp:335
#18 0x00007ffff6b98cf9 in universe2_init () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/memory/universe.cpp:928
#19 0x00007ffff633fec5 in init_globals () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/init.cpp:134
#20 0x00007ffff6b60ccb in Threads::create_vm (args=0x7ffff7bfed50, canTryAgain=0x7ffff7bfec5b) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:2852
#21 0x00007ffff644f659 in JNI_CreateJavaVM_inner (vm=0x7ffff7bfeda8, penv=0x7ffff7bfedb0, args=0x7ffff7bfed50)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/prims/jni.cpp:3621
#22 0x00007ffff644f9a5 in JNI_CreateJavaVM (vm=0x7ffff7bfeda8, penv=0x7ffff7bfedb0, args=0x7ffff7bfed50) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/prims/jni.cpp:3709
#23 0x00007ffff7facd29 in InitializeJVM (pvm=0x7ffff7bfeda8, penv=0x7ffff7bfedb0, ifn=0x7ffff7bfee00)at /home/yym/openjdk17/jdk17-master/src/java.base/share/native/libjli/java.c:1541
#24 0x00007ffff7fa9623 in JavaMain (_args=0x7fffffffaee0) at /home/yym/openjdk17/jdk17-master/src/java.base/share/native/libjli/java.c:415
#25 0x00007ffff7fb08ab in ThreadJavaMain (args=0x7fffffffaee0) at /home/yym/openjdk17/jdk17-master/src/java.base/unix/native/libjli/java_md.c:651
#26 0x00007ffff7c94ac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#27 0x00007ffff7d26850 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

##gdb调试堆栈,解析字段

#0  ClassFileParser::parse_fields (this=0x7ffff7bfde10, cfs=0x7ffff0039190, is_interface=false, fac=0x7ffff00391d0, cp=0x7fffd98e3838, cp_size=743,java_fields_count_ptr=0x7ffff7bfdfa6, __the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classFileParser.cpp:1578
#1  0x00007ffff5fc289c in ClassFileParser::parse_stream (this=0x7ffff7bfde10, stream=0x7ffff0039190, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classFileParser.cpp:5847
#2  0x00007ffff5fc179d in ClassFileParser::ClassFileParser (this=0x7ffff7bfde10, stream=0x7ffff0039190, name=0x7fffe0498890, loader_data=0x7ffff00c61a0, cl_info=0x7ffff7bfe040,pub_level=ClassFileParser::BROADCAST, __the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classFileParser.cpp:5590
#3  0x00007ffff66337a3 in KlassFactory::create_from_stream (stream=0x7ffff0039190, name=0x7fffe0498890, loader_data=0x7ffff00c61a0, cl_info=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/klassFactory.cpp:199
#4  0x00007ffff5fd2471 in ClassLoader::load_class (name=0x7fffe0498890, search_append_only=false, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/classLoader.cpp:1222
#5  0x00007ffff6b1066e in SystemDictionary::load_instance_class_impl (class_name=0x7fffe0498890, class_loader=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:1290
#6  0x00007ffff6b10a49 in SystemDictionary::load_instance_class (name_hash=1078158816, name=0x7fffe0498890, class_loader=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:1356
#7  0x00007ffff6b0eb11 in SystemDictionary::resolve_instance_class_or_null (name=0x7fffe0498890, class_loader=..., protection_domain=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:724
#8  0x00007ffff6b0d696 in SystemDictionary::resolve_instance_class_or_null_helper (class_name=0x7fffe0498890, class_loader=..., protection_domain=...,__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:295
#9  0x00007ffff6b0d53c in SystemDictionary::resolve_or_null (class_name=0x7fffe0498890, class_loader=..., protection_domain=..., __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:278
#10 0x00007ffff6b0d47f in SystemDictionary::resolve_or_fail (class_name=0x7fffe0498890, class_loader=..., protection_domain=..., throw_error=true, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:264
#11 0x00007ffff5da8a1a in SystemDictionary::resolve_or_fail (class_name=0x7fffe0498890, throw_error=true, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.hpp:100
#12 0x00007ffff6bf725e in vmClasses::resolve (id=vmClassID::URL_klass_knum, __the_thread__=0x7ffff00289b0)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/vmClasses.cpp:99
#13 0x00007ffff6bf735c in vmClasses::resolve_until (limit_id=vmClassID::LIMIT, start_id=@0x7ffff7bfe8f0: vmClassID::AssertionStatusDirectives_klass_knum,__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/vmClasses.cpp:108
#14 0x00007ffff6bf7707 in vmClasses::resolve_all (__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/vmClasses.cpp:192
#15 0x00007ffff6b1190a in SystemDictionary::initialize (__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/classfile/systemDictionary.cpp:1654
#16 0x00007ffff6b968a1 in Universe::genesis (__the_thread__=0x7ffff00289b0) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/memory/universe.cpp:335
#17 0x00007ffff6b98cf9 in universe2_init () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/memory/universe.cpp:928
#18 0x00007ffff633fec5 in init_globals () at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/init.cpp:134
#19 0x00007ffff6b60ccb in Threads::create_vm (args=0x7ffff7bfed50, canTryAgain=0x7ffff7bfec5b) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/runtime/thread.cpp:2852
#20 0x00007ffff644f659 in JNI_CreateJavaVM_inner (vm=0x7ffff7bfeda8, penv=0x7ffff7bfedb0, args=0x7ffff7bfed50)at /home/yym/openjdk17/jdk17-master/src/hotspot/share/prims/jni.cpp:3621
#21 0x00007ffff644f9a5 in JNI_CreateJavaVM (vm=0x7ffff7bfeda8, penv=0x7ffff7bfedb0, args=0x7ffff7bfed50) at /home/yym/openjdk17/jdk17-master/src/hotspot/share/prims/jni.cpp:3709
#22 0x00007ffff7facd29 in InitializeJVM (pvm=0x7ffff7bfeda8, penv=0x7ffff7bfedb0, ifn=0x7ffff7bfee00)at /home/yym/openjdk17/jdk17-master/src/java.base/share/native/libjli/java.c:1541
#23 0x00007ffff7fa9623 in JavaMain (_args=0x7fffffffaee0) at /home/yym/openjdk17/jdk17-master/src/java.base/share/native/libjli/java.c:415
#24 0x00007ffff7fb08ab in ThreadJavaMain (args=0x7fffffffaee0) at /home/yym/openjdk17/jdk17-master/src/java.base/unix/native/libjli/java_md.c:651
#25 0x00007ffff7c94ac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#26 0x00007ffff7d26850 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

相关文章:

openjdk17 jvm加载class文件,解析字段和方法,C++源码展示

##构造方法ClassFileParser&#xff0c;parse_stream解析文件流 ClassFileParser::ClassFileParser(ClassFileStream* stream,Symbol* name,ClassLoaderData* loader_data,const ClassLoadInfo* cl_info,Publicity pub_level,TRAPS) :_stream(stream),_class_name(NULL),_load…...

基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人

导读 本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境&#xff0c;整个搭建过程估计在 10 分钟左右即可完成&#xff0c;无须开发任何代码。 文中使用一篇 TiDB 文档作为本地数据源作为示…...

Vue项目实战-新能源汽车可视化(二)(持续更新中)

一.项目代码 1.DataSceen <template><div id"app-content"><div class"containerBox"><!-- 左边区域 --><div classleft><!-- 车辆情况 --><div class"item"></div><!-- 历史数据 -->&…...

CSS border 0.5px 虚线

border 0.5px 存在很多兼容问题&#xff0c;很多设备都会默认展示 1px 如果是实线可以用 background 和 height 1px 然后transform scaleY(0.5) 去实现。 但是虚线怎么办呢。 .ticket-line::before {content: ;position: absolute;top: 0;left: 0;right: 0;bottom: 0;width: …...

利用最大流算法解决Adam教授的双路径问题

利用最大流算法解决Adam教授的双路径问题 Adam教授的烦恼问题描述与转换转换步骤伪代码C代码示例解释Adam教授的烦恼 Adam教授有两个儿子,可不幸的是,他们互相讨厌对方。随着时间的推移,问题变得如此严重,他们之间不仅不愿意一起走到学校,而且每个人都拒绝走另一个人当天…...

c#如何开发后端

1选择开发框架 在 C# 中&#xff0c;用于后端开发最常用的框架是ASP.NET。它提供了构建 Web 应用程序、Web API 和微服务等多种后端服务所需的功能。ASP.NET有不同的模式&#xff0c;如ASP.NET MVC&#xff08;Model - View - Controller&#xff09;和ASP.NET Web API。ASP.NE…...

05_掌握Python3.11新特性-模式匹配

学习完本篇内容,你将掌握以下技能: 了解 Python 3.11 中的模式匹配新特性掌握如何使用模式匹配来简化代码和提高代码的可读性熟练掌握并应用到实际编程中python3.11新特性-模式匹配 在 Python 3.11 中,引入了模式匹配(pattern match...

【AI日记】24.12.09 kaggle 比赛 Titanic-12

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容&#xff1a; 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习&#xff08;pandas&#xff0c;numpy&#xff0c;sklearn&#xff09;&#xff0c;数据可视化&#xff…...

Linux,如何要定位并删除占用磁盘空间的大文件?

Linux&#xff0c;如何要定位并删除占用磁盘空间的大文件&#xff1f; 要定位并删除占用磁盘空间的大文件主要有以下这些步骤&#xff1a; 1. 使用 du 命令查找大文件或目录 du&#xff08;Disk Usage&#xff09;命令可以帮助你查找占用空间较大的文件或目录。 du -ah --…...

【Java】—— 图书管理系统

基于往期学习的类和对象、继承、多态、抽象类和接口来完成一个控制台版本的 “图书管理系统” 在控制台界面中实现用户与程序交互 任务目标&#xff1a; 1、系统中能够表示多本图书的信息 2、提供两种用户&#xff08;普通用户&#xff0c;管理员&#xff09; 3、普通用户…...

初识Linux · 线程同步

目录 前言&#xff1a; 认识条件变量 认识接口 快速使用接口 生产消费模型 前言&#xff1a; 前文我们介绍了线程互斥&#xff0c;线程互斥是为了防止多个线程对临界资源访问的时候出现了对一个变量同时操作的情况&#xff0c;对于线程互斥来说&#xff0c;我们使用到了锁…...

游戏引擎学习第40天

仓库 : https://gitee.com/mrxiao_com/2d_game 整理了一些需要完成的任务&#xff0c;确保所有内容都已清理完成&#xff0c;因为需要为后续的数学部分打好基础。下一步将认真开始处理数学相关内容&#xff0c;因此在此之前&#xff0c;需要彻底梳理未完成的事项&#xff0c;清…...

概率论——假设检验

解题步骤&#xff1a; 1、提出假设H0和H1 2、定类型&#xff0c;摆公式 3、计算统计量和拒绝域 4、定论、总结 Z检验 条件&#xff1a; 对μ进行检验&#xff0c;并且总体方差已知道 例题&#xff1a; 1、假设H0为可以认为是570N&#xff0c;H1为不可以认为是570N 2、Z…...

【Pandas】pandas isnull

Pandas2.2 General Top-level missing data 方法描述isna(obj)用于检测数据中的缺失值isnull(obj)用于检测数据中的缺失值notna(obj)用于检测数据中的非缺失值notnull(obj)用于检测数据中的非缺失值 pandas.isnull() pandas.isnull() 是 Pandas 库中的一个函数&#xff0c;…...

Rust HashMap使用

Rust 的 HashMap 是一个功能强大的数据结构&#xff0c;它结合了哈希表的高效性和 Rust 编程语言的内存安全特性。通过提供常数时间复杂度的查找、插入和删除操作&#xff0c;以及丰富的 API&#xff0c;它在许多实际应用中都非常有用。 示例代码&#xff1a; use std::colle…...

Spring Boot如何实现防盗链

一、什么是盗链 盗链是个什么操作&#xff0c;看一下百度给出的解释&#xff1a;盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的…...

TIM输入捕获---STM

一、简介 IC输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存在CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模…...

核密度估计——从直方图到核密度(核函数)估计_带宽选择

参考 核密度估计&#xff08;KDE&#xff09;原理及实现-CSDN博客 机器学习算法&#xff08;二十一&#xff09;&#xff1a;核密度估计 Kernel Density Estimation(KDE)_算法_意念回复-GitCode 开源社区 引言 在统计学中&#xff0c;概率密度估计是一种重要的方法&#xff0…...

javaScript Tips

一键去掉鼠标的图标 document.body.style.cursor none; 获取一个随机颜色 const randomHex () >#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, 0)}; 生成随机字符串&#xff0c;各种随机基本都是这个原理 const randomString () > Math.rand…...

【Ubuntu】清理、压缩VirtualBox磁盘空间大小

1、说明 本人为虚拟机创建了两个硬盘:root.vdi 和 hoom.vdi,在创建虚拟机时,分别挂载在/root目录和/home目录下。 下面演示分别清理、压缩两个磁盘的空间。 2、清理空间 1)清理 root.vid sudo dd if=/dev/zero of=/EMPTY bs=1M;sudo rm -f /EMPTY输出信息中会提示,如…...

若依 ruoyi VUE el-select 直接获取 选择option 的 label和value

1、最新在研究若依这个项目&#xff0c;我使用的是前后端分离的方案&#xff0c;RuoYi-Vue-fast(后端) RuoYi-Vue-->ruoyi-ui(前端)。RuoYi-Vue-fast是单应用版本没有区分那么多的modules 自己开发起来很方便&#xff0c;这个项目运行起来很方便&#xff0c;但是需要自定义的…...

C++小小复习一下

类&#xff0c;对象&#xff0c;成员变量&#xff0c;成员函数 特点&#xff1a;面向对象程序设计---因为要创建对象来调用类里面的函数或者成员变量 比如你的对象是一个生物-人&#xff1a;他会有自己的一些属性&#xff1a;身高&#xff0c;体重&#xff0c;性别等&#xf…...

JavaWeb学习(4)(四大域、HttpSession原理(面试)、SessionAPI、Session实现验证码功能)

目录 一、web四大域。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;RequestScope。(请求域) &#xff08;3&#xff09;SessionScope。(会话域) &#xff08;4&#xff09;ApplicationScope。(应用域) &#xff08;5&#xff09;PageScope。(页面域) 二、Ht…...

quartz 架构详解

‌Quartz是一个开源的作业调度框架&#xff0c;完全由Java编写&#xff0c;主要用于定时任务的调度和管理。Quartz的架构主要包括以下几个核心组件‌&#xff1a; 1.‌调度器&#xff08;Scheduler&#xff09;‌&#xff1a;调度器是Quartz的核心组件&#xff0c;负责管理Qua…...

Redis安装和Python练习(Windows11 + Python3.X + Pycharm社区版)

环境 Windows11 Python3.X Pycharm社区版 思路 1 github下载redis压缩包 &#xff0c;安装并启动redis服务&#xff0c;在Pycharm中运行python程序&#xff0c;连接redis服务&#xff0c;熟悉redis的使用和巩固python语言。 2 python开发环境的搭建参考 https://mp.csdn.…...

明年 iPhone 将搭载苹果自研 5G 基带芯片

明年 iPhone 将搭载苹果自研 5G 基带芯片 据彭博社记者 Mark Gurman 透露&#xff0c;苹果首款自主研发 5G 基带芯片即将面世。 苹果首款自研 5G 基带芯片将命名为「Sinope」&#xff0c;将应用在 2025 年发布的 iPhone SE、iPhone 17 Slim 版以及低端系列的 iPad 系列。「Si…...

1.1 Beginner Level学习之“编写简单的发布服务器和订阅服务器”(第十二节)

学习大纲&#xff1a; 1. 编写发布服务器节点 在ROS中&#xff0c;**节点&#xff08;Node&#xff09;**是与ROS网络通信的基本单位。在这个部分&#xff0c;我们将创建一个简单的发布节点&#xff08;talker&#xff09;&#xff0c;它会不断向话题&#xff08;topic&#x…...

C语言 字符串操作函数

strncpy() 用于将一个字符串的一部分拷贝到另一个字符串中。 char* strncpy(char* destination, const char* source, size_t num);参数&#xff1a;destination 是目标字符串的指针&#xff0c;表示将要拷贝到的位置source 是源字符串的指针&#xff0c;表示要拷贝的字符串num…...

论文概览 |《Cities》2024.07 Vol.150(上)

本次给大家整理的是《Cities》杂志2024年07月第150期的论文的题目和摘要&#xff0c;一共包括90篇SCI论文&#xff01;由于论文过多&#xff0c;我们将通过两篇文章进行介绍&#xff0c;本篇文章介绍第1--第45篇论文! 论文1 Spatiotemporal infection dynamics: Linking indiv…...

查看Windows系统上的Redis服务器是否设置了密码

查看 Redis 配置文件 1.找到 Redis 配置文件&#xff1a; 通常Redis配置文件名为 redis.windows.conf 或 redis.conf&#xff0c;它位于Redis安装目录中。 2.打开配置文件&#xff1a; 使用文本编辑器&#xff08;如Notepad、VS Code等&#xff09;打开该文件。 3.查找 re…...

30天学会Go--第6天 GO语言 RESTful API 学习与实践

30天学会Go–第6天 GO语言 RESTful API 学习与实践 文章目录 30天学会Go--第6天 GO语言 RESTful API 学习与实践一、 RESTful API 的设计原则1.1 RESTful API 的核心概念1.2 RESTful API 的 URL 设计1.3 RESTful API 的数据格式 二、 实现 RESTful API2.1 定义数据模型2.2 实现…...

数据分析特征标准化方法及其Python实现

数据分析特征标准化方法及其Python实现 1、概述 在数据分析中,对特征进行标准化主要是: 1、消除量纲影响 不同特征可能具有不同的量纲和数量级。 例如,一个特征可能是以米为单位的长度,而另一个特征可能是以秒为单位的时间。直接使用这些具有不同量纲的原始数据进行分析…...

【推导过程】常用共轭先验分布

文章目录 相关教程相关文献常用共轭先验分布预备知识贝叶斯统计后验分布的计算 正态均值(方差已知)的共轭先验分布是正态分布二项分布中的成功概率 θ 的共轭先验分布是贝塔分布正态均值(方差已知)的共轭先验分布是倒伽玛分布 作者&#xff1a;小猪快跑 基础数学&计算数学&…...

notepad++安装教程(超详细)

1.下载地址&#xff08;可以私信博主&#xff09; https://notepad-plus.en.softonic.com/download 2.解压安装...

Django快速入门

目录 1 创建django工程2 运行django3 Django工程目录详解4 开始一个app5 CBV和FBV6 使用模板7 使用模板语言8 自定义simple_tag Django 是用 Python 写的一个自由和开放源码 web 应用程序框架。 web框架是一套组件&#xff0c;能帮助你更快、更容易地开发web站点。当你开始构建…...

ISO45001职业健康安全管理体系认证流程

前期准备 领导决策&#xff1a;企业高层领导需认识到实施 ISO 45001 体系的重要性和必要性&#xff0c;做出认证决策&#xff0c;并承诺提供必要的资源支持。成立工作小组&#xff1a;由企业各相关部门人员组成工作小组&#xff0c;明确各成员的职责和分工&#xff0c;确保工作…...

Elasticsearch一分钟

参考 FST有穷状态转换器/咆哮位图/增量缩紧 Es技术难点 架构...

MFC中如何创建一个非模态对话框

对话框是编程中常用的一个控件&#xff0c;非模态对话框与用户交互更加友好&#xff0c;用户不必关闭对话框就能进行其他操作&#xff0c;比如拷贝黏贴&#xff0c;对比数据&#xff0c;执行其他命令。 由于无模态对话经常使用&#xff0c;且用法类似&#xff0c;因此我把它写…...

【设计模式】单例模式 在java中的应用

文章目录 引言什么是单例模式单例模式的应用场景单例模式的优缺点优点缺点 单例模式的基本实现饿汉式单例模式懒汉式单例模式双重检查锁定静态内部类枚举单例 单例模式的线程安全问题多线程环境下的单例模式线程安全的实现方式1. **懒汉式单例模式&#xff08;线程不安全&#…...

北京2024年CSP-S/J 及NOIP游记

北京2024年CSP-S/J 及NOIP游记 2024.9 开学2024.9 CSP-S12024.9 停课2024.10假期 误入歧途2024.10 CSP-S2 冲刺 2024.9 开学 开学升入初三&#xff0c;9月的前半个月一直在搞文化课&#xff08;把文化课搞得风生水起&#xff09;&#xff0c;经历了1天的校运动会&#xff08;摆…...

vue 纯前端对接阿里云oss文件上传封装,支持批量多文件上传,大文件上传时拿到上传进度。

使用阿里云上传先看官方文档&#xff08;阿里云官方文档&#xff09; 我这边只做了简单上传和分片上传&#xff0c;也包含了粘贴上传和拖拽上传。 1.首页先安装 npm i ali-oss2.在utils下创建uploadOss.js const OSS require(ali-oss) import { getOsstoken } from /api/in…...

YOLO系列发展历程:从YOLOv1到YOLO11,目标检测技术的革新与突破

文章目录 前言一、YOLOv1&#xff1a;单阶段目标检测的开端二、YOLOv2&#xff1a;更精准的实时检测三、YOLOv3&#xff1a;阶梯特征融合四、YOLOv4&#xff1a;性能和速度的新平衡五、YOLOv5&#xff1a;易用性和扩展性的加强六、YOLOv6&#xff1a;工业部署的利器七、YOLOv7&…...

认识Java中的异常(半成品)

1.异常的概念与体系结构 1.1在Java中,将程序执行过程中发生的不正常行为称为异常.比如 1.算数异常 public class Main1 {public static void main(String[] args){System.out.println(10/0);} } //异常信息为:Exception in thread "main" java.lang.ArithmeticExc…...

Sqoop 指令语法手册

目录 help指令list-databases参数描述示例 codegen参数描述 Sqoop create-hive-table参数描述 eval参数描述 Export参数描述 import参数描述 import-all-tables参数描述 import-mainframe参数描述 job参数描述 list-tables参数描述 merge参数描述 help指令 sqoop help 下面的S…...

网络安全 - SQL Injection

1.1.1 摘要 日前&#xff0c;国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布&#xff0c;600万用户的登录名及密码被公开泄露&#xff0c;随后又有多家网站的用户密码被流传于网络&#xff0c;连日来引发众多网民对自己账号、密码等互联网信息被盗取的普遍担忧。 网络…...

spi 发送与接收 移位写法

spi _tx 发送模块 片选信号cs可以在top顶层控制模块产生 timescale 1ns / 1psmodule spi_rom#(parameter SIZE 8 )(input wire clk ,input wire rst_n,input wire [SIZE-1:0] data ,input wire …...

MyBatis关联映射

目录 一、什么是关联注解&#xff1f; 二、数据库建表 1.学生表 2.教师表 三、一般查询 &#xff08;1&#xff09;创建StudentTeacher类 &#xff08;2&#xff09;mapper层 &#xff08;3&#xff09;Dao接口 &#xff08;4&#xff09;Test类 &#xff08;5&#x…...

通过华为鲲鹏认证的软件产品如何助力信创产业

软件通过华为鲲鹏认证与信创产业有着密切的联系。鲲鹏认证是华为推动信创产业发展的一项重要举措&#xff0c;通过该认证&#xff0c;软件可以在华为的生态系统中实现更好的兼容性和性能优化&#xff0c;从而推动信创产业的全面发展和国产化替代。 鲲鹏认证的定义和重要性 鲲…...

陈志刚解读:国家数据基础设施建设解读(附下载)

本期分享陈志刚解读&#xff1a;国家数据基础设施建设解读&#xff0c;从背景意图、概念内涵、发展愿景与总体功能、总体架构、重点方向、算力底座、网络支撑、安全防护和组织保障十个方面展开&#xff0c;共52页ppt。 加入星球可获取完整版资料 篇幅限制&#xff0c;部分内容…...

QT 中 sqlite 数据库使用

一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …...