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

网站建设 生产/广州网站设计专注乐云seo

网站建设 生产,广州网站设计专注乐云seo,wordpress老站开启多站点,汕头快速建站模板##构造方法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),_load…

##构造方法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…...

驱动断链的研究

准备 source insight 从现在开始我们正式进入内核编程&#xff0c;但是很多内核里面的结构和类型是需要我们额外声明的&#xff0c;我们就需要一个工具来快速的阅读WIn内核源码。这里我贴出我所参考的博客 羽夏看Win系统内核——SourceInsight 配置 WRK - 寂静的羽夏 - 博客…...

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

&#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型&#xff1a;从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型&#xff08;LLM&#xff09;和人工智能技术的迅猛发展&#xff0c;开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…...

做题时HashSet、TreeSet、LinkedHashSet的选择

一、HashSet 此类实现 Set 接口&#xff0c;由哈希表&#xff08;实际上是一个 HashMap 实例&#xff09;支持。它不保证 set 的迭代顺序&#xff1b;特别是它不保证该顺序恒久不变。 代码&#xff1a; import java.util.HashSet; import java.util.LinkedHashSet; import ja…...

Manus手套动作捕捉AI训练灵巧手

随着人工智能&#xff08;AI&#xff09;和机器人技术的融合日益紧密&#xff0c;使用真实动作数据AI扩容训练机器人的方式正在被用于开发更富表现力的机器人。Manus手套凭借精准的动作捕捉技术和导出数据的强大兼容性&#xff0c;在灵巧手的研发和应用中发挥了重要作用。 手部…...

嵌入式驱动开发详解4(内核定时器)

文章目录 前言通用定时器系统节拍节拍数与时间转换基本框架定时器使用代码展示通用定时器特点 高精度定时器 前言 LInux内核定时器是一种基于未来时间点的计时方式&#xff0c;以当前时刻来启动的时间点&#xff0c;以未来的某一时刻为终止点。比如&#xff0c;现在是10点5分&…...

Linux:信号的预备和产生

引入&#xff1a; 比如当前快递小哥需要通知你下来取快递&#xff08;产生信号&#xff09;&#xff0c;然后通过电话或短信告知了你&#xff08;发送信号&#xff09;&#xff0c;但是当前你正在打游戏&#xff0c;所以你并不会马上去处理&#xff0c;但是你会记得这件事&…...

国城杯2024——Curve

相关知识链接&#xff1a;https://tangcuxiaojikuai.xyz/post/187210a7.html #sagemath from Crypto.Util.number import *def add(P, Q):(x1, y1) P(x2, y2) Qx3 (x1*y2 y1*x2) * inverse(1 d*x1*x2*y1*y2, p) % py3 (y1*y2 - a*x1*x2) * inverse(1 - d*x1*x2*y1*y2, p…...

AI生成不了复杂前端页面?也许有解决方案了

在2024年&#xff0c;编程成为了人工智能领域最热门的赛道。AI编程技术正以惊人的速度进步&#xff0c;但在生成前端页面方面&#xff0c;AI的能力还是饱受质疑。自从ScriptEcho平台上线以来&#xff0c;我们收到了不少用户的反馈&#xff0c;他们表示&#xff1a;“生成的页面…...

常见矩阵分析法(BCG、GE、IE、SPACE、TOWS、优先、战略优先级、安索夫、风险矩阵):如何通过系统化方法助力战略决策与数据驱动决策

在快速变化的商业环境中&#xff0c;企业决策者面临着诸多复杂的选择与挑战。矩阵分析法作为战略分析的重要工具&#xff0c;能够系统化地分析企业的内外部环境&#xff0c;帮助管理层做出更加科学、合理的决策。本文将全面解析常见的矩阵分析法&#xff0c;并探讨它们在数据驱…...

JWT 在 SaaS 系统中的作用与分布式 SaaS 系统设计的最佳实践

在现代 SaaS&#xff08;软件即服务&#xff09; 系统中&#xff0c;随着服务规模的扩大和用户需求的多样化&#xff0c;如何高效、安全地进行用户身份验证、权限控制以及租户隔离&#xff0c;成为了系统架构中的核心问题之一。**JWT&#xff08;JSON Web Token&#xff09;**作…...

基于C#和Sql Server的网上书店管理系统

基于C#和Sql Server的网上书店管理系统 摘要 本系统是建立在 Windows 平台上&#xff0c;基于 B/S 结构的一个网上书店。通过这个网上书店&#xff0c;可以实 现简单的电子商务功能。 整个网站风格一致&#xff0c;较为美观&#xff0c;有完善的导航机制。普通用户从前台首页…...

特高频局放装置在现代配电设施中的应用

引言 随着电力系统的快速发展&#xff0c;尤其是现代配电系统的不断升和智能化&#xff0c;配电网的安全、稳定和运行变得愈发重要。为了确保电力系统能够及时应对各种运行问题&#xff0c;并提高故障诊断和监控的能力&#xff0c;现代配电系统中的监测技术也不断得到创新与提…...

FSC认证是什么?FSC认证费用

FSC认证是指森林管理委员会&#xff08;Forest Stewardship Council&#xff09;颁发的一种认证&#xff0c;以下是对FSC认证的详细介绍&#xff1a; 一、FSC认证的定义与目的 FSC认证标志着一件产品来自经过环境友好、社会有益和经济可行的可持续管理的森林。FSC是一个独立的…...

JAVA数据结构

1.数组 (Array): 固定大小的容器,用于存储相同类型的元素,数组在内存中是连续存储的,支持通过索引快 速访问元素。 int[] numbers = new int[10]; numbers[0] = 1;2.Java Collections Framework (JCF) JCF提供了一组接口和类用于管理和操作集合(如列表,集合,…...

mysql8 主从复制一直失败

问题描述&#xff1a; 开启同步后从服务器一直失败&#xff0c;报错如下&#xff1a; Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log …...

EDA - Spring Boot构建基于事件驱动的消息系统

文章目录 概述事件驱动架构的基本概念工程结构Code创建事件和事件处理器创建事件总线创建消息通道和发送逻辑创建事件处理器消息持久化创建消息发送事件配置 Spring Boot 启动类测试运行项目 概述 在微服务架构和大规模分布式系统中&#xff0c;事件驱动架构&#xff08;EDA&a…...

使用vue-seamless-scroll实现echarts图表大屏滚动,出现空白间隔的解决方案

一、背景介绍 最近的业务开发需求&#xff0c;想要实现echarts图表大屏滚动&#xff0c;小编首先采用vue-seamless-scroll进行实现&#xff0c;结果发现第二屏出现空白间隔&#xff0c;尝试了多种解决方案均不生效&#xff0c;最终选择换一个方案。 二、封装的ScrollList组件…...

ios使用UIScrollView和PageControl创建图片轮播

1.创建cocoa touch class 2.同时创建xib页面 3.SceneDelegate设置根视图控制器 // // SceneDelegate.m // iosstudy2024 // // Created by figo on 2024/8/5. //#import "SceneDelegate.h" #import "WidgetViewController.h"interface SceneDelegate …...

3D 生成重建024-LGM第一个开源的3D生成大模型!

3D 生成重建024-LGM第一个开源的3D生成大模型 文章目录 0 论文工作1 论文方法2 实验效果 0 论文工作 这篇论文介绍了一种名为LGM&#xff08;大型多视角高斯模型&#xff09;的新方法&#xff0c;用于从单视角图像或文本提示生成高分辨率的三维内容。该方法的核心思想是双重的…...

linux目录权限

一、目录权限的基本概念 Linux中的每个文件和目录都有与之关联的权限&#xff0c;这些权限决定了谁可以读取、写入或执行它们。权限分为三组&#xff1a; 所有者&#xff08;Owner&#xff09;权限&#xff1a;目录所有者的权限群组&#xff08;Group&#xff09;权限&#x…...

语言模型使用心得

使用像文心一言这样的语言模型&#xff0c;在撰写文章时确实能提供极大的帮助。然而&#xff0c;重要的是我们要明确主次关系&#xff1a;自己的创意和内容应当是文章的核心&#xff0c;而语言模型则扮演着一个辅助角色&#xff0c;帮助我们梳理思路&#xff0c;使文章条理更加…...

ChatGPT客户端安装教程(附下载链接)

用惯了各类AI的我们发现每天打开网页还挺不习惯和麻烦&#xff0c;突然发现客户端上架了&#xff0c;懂摸鱼的人都知道这里面的道行有多深&#xff0c;话不多说&#xff0c;开整&#xff01; 以下是ChatGPT客户端的详细安装教程&#xff0c;适用于Windows和Mac系统&#xff1a…...

Electron 基础+传值+引用+安全

文章目录 概要elctron 生命周期及窗口应用主进程与渲染进程交互技术细节electron 中需要注意的安全问题 概要 一、Electron简介 Electron是一个开源框架&#xff0c;它允许开发者使用JavaScript、HTML和CSS构建跨平台的桌面应用程序。它基于Chromium&#xff08;谷歌浏览器的…...

手机租赁系统全面解析与开发指南

内容概要 手机租赁系统已经成为现代商业中不可或缺的一部分&#xff0c;尤其是在智能手机普及的时代。随着消费者对新机型兴趣的不断增加&#xff0c;大家纷纷走上了“试一试再买”的道路&#xff0c;手机租赁这条路因此越走越宽。这部分的市场需求让创业者们看到了机会。不仅…...

mongoDb的读session和写session权限报错问题

go在使用mongoDb时用到了全局会话&#xff0c;发现在创建的session的逻辑相同&#xff0c;首先会进行数据的查询&#xff0c;此时获取了全局session执行读操作&#xff0c;查询所有文档&#xff0c;则当前会话为读会话&#xff0c;当再去插入时发现会报错&#xff0c;此时sessi…...

Centos在2024年6月30日停止维护后如何换yum源安装组件

现象&#xff1a; 在centos7里使用yum安装报错&#xff1a; Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was 14: curl#6 - “Could not resolve…...

阿里云ACP云计算模拟试题(附答案解析)

1、将基础设施作为服务的云计算服务类型是_____服务。 A.laas B.Paas C.SaaS D.Daas 答案&#xff1a;A 解析&#xff1a;基础设施即服务有时缩写为 IaaS&#xff0c;包含云 IT 的基本构建块&#xff0c;通常提供对联网功能、计算机&#xff08;虚拟或专用硬件&#x…...

简单的爬虫脚本编写

一、数据来源分析 想爬取一个网站的数据&#xff0c;我们首先要进行数据分析。通过浏览器F12开发者工具栏进行抓包&#xff0c;可以分析我们想要的数据来源。 通过关键字搜索&#xff0c;可以找到相对应的数据包 二、爬虫实现 需要用到的模块为&#xff1a;request&#xf…...

[MySQL基础](三)SQL--图形化界面+DML

本专栏内容为&#xff1a;MySQL学习专栏 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;MySql &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 目录 图…...