1483 BAD_ALLOCATION_TYPE, // 0 1484 BAD_ALLOCATION_TYPE, // 1 1485 BAD_ALLOCATION_TYPE, // 2 1486 BAD_ALLOCATION_TYPE, // 3 1487 NONSTATIC_BYTE , // T_BOOLEAN = 4, 1488 NONSTATIC_SHORT, // T_CHAR = 5, 1489 NONSTATIC_WORD, // T_FLOAT = 6, 1490 NONSTATIC_DOUBLE, // T_DOUBLE = 7, 1491 NONSTATIC_BYTE, // T_BYTE = 8, 1492 NONSTATIC_SHORT, // T_SHORT = 9, 1493 NONSTATIC_WORD, // T_INT = 10, 1494 NONSTATIC_DOUBLE, // T_LONG = 11, 1495 NONSTATIC_OOP, // T_OBJECT = 12, 1496 NONSTATIC_OOP, // T_ARRAY = 13, 1497 NONSTATIC_OOP, // T_VALUETYPE = 14, 1498 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1499 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1500 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1501 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1502 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1503 BAD_ALLOCATION_TYPE, // T_VALUETYPEPTR= 20, 1504 BAD_ALLOCATION_TYPE, // T_CONFLICT = 21, 1505 BAD_ALLOCATION_TYPE, // 0 1506 BAD_ALLOCATION_TYPE, // 1 1507 BAD_ALLOCATION_TYPE, // 2 1508 BAD_ALLOCATION_TYPE, // 3 1509 STATIC_BYTE , // T_BOOLEAN = 4, 1510 STATIC_SHORT, // T_CHAR = 5, 1511 STATIC_WORD, // T_FLOAT = 6, 1512 STATIC_DOUBLE, // T_DOUBLE = 7, 1513 STATIC_BYTE, // T_BYTE = 8, 1514 STATIC_SHORT, // T_SHORT = 9, 1515 STATIC_WORD, // T_INT = 10, 1516 STATIC_DOUBLE, // T_LONG = 11, 1517 STATIC_OOP, // T_OBJECT = 12, 1518 STATIC_OOP, // T_ARRAY = 13, 1519 STATIC_OOP, // T_VALUETYPE = 14, 1520 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1521 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1522 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1523 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1524 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1525 BAD_ALLOCATION_TYPE, // T_VALUETYPEPTR= 20, 1526 BAD_ALLOCATION_TYPE, // T_CONFLICT = 21, 1527 }; 1528 1529 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type, bool is_flattenable) { 1530 assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values"); 1531 FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)]; 1532 assert(result != BAD_ALLOCATION_TYPE, "bad type"); 1533 if (is_flattenable) { 1534 result = is_static ? STATIC_FLATTENABLE : NONSTATIC_FLATTENABLE; 1535 } 1536 return result; 1537 } 1538 1539 class ClassFileParser::FieldAllocationCount : public ResourceObj { 1540 public: 1541 u2 count[MAX_FIELD_ALLOCATION_TYPE]; 1542 1543 FieldAllocationCount() { 1544 for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) { 1545 count[i] = 0; 1546 } 6004 Handle module_handle(THREAD, module_entry->module()); 6005 6006 // Allocate mirror and initialize static fields 6007 // The create_mirror() call will also call compute_modifiers() 6008 java_lang_Class::create_mirror(ik, 6009 Handle(THREAD, _loader_data->class_loader()), 6010 module_handle, 6011 _protection_domain, 6012 CHECK); 6013 6014 assert(_all_mirandas != NULL, "invariant"); 6015 6016 // Generate any default methods - default methods are public interface methods 6017 // that have a default implementation. This is new with Java 8. 6018 if (_has_nonstatic_concrete_methods) { 6019 DefaultMethods::generate_default_methods(ik, 6020 _all_mirandas, 6021 CHECK); 6022 } 6023 6024 if (is_value_type()) { 6025 ValueKlass* vk = ValueKlass::cast(ik); 6026 vk->initialize_calling_convention(); 6027 } 6028 6029 // Add read edges to the unnamed modules of the bootstrap and app class loaders. 6030 if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() && 6031 !module_entry->has_default_read_edges()) { 6032 if (!module_entry->set_has_default_read_edges()) { 6033 // We won a potential race 6034 JvmtiExport::add_default_read_edges(module_handle, THREAD); 6035 } 6036 } 6037 6038 int nfields = ik->java_fields_count(); 6039 if (ik->is_value()) nfields++; 6040 for(int i = 0; i < nfields; i++) { 6041 if (ik->field_access_flags(i) & JVM_ACC_FLATTENABLE) { 6042 Symbol* klass_name = ik->field_signature(i)->fundamental_name(CHECK); 6043 // Value classes must have been pre-loaded 6044 Klass* klass = SystemDictionary::find(klass_name, 6045 Handle(THREAD, ik->class_loader()), 6046 Handle(THREAD, ik->protection_domain()), CHECK); 6047 assert(klass != NULL, "Sanity check"); 6048 assert(klass->access_flags().is_value_type(), "Value type expected"); 6049 ik->set_value_field_klass(i, klass); 6050 klass_name->decrement_refcount(); 6051 } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0) 6052 && ((ik->field_access_flags(i) & JVM_ACC_STATIC) != 0)) { 6053 ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i)); 6054 } 6055 } 6056 6057 // Update the loader_data graph. 6058 record_defined_class_dependencies(ik, CHECK); 6059 6060 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */); 6061 6062 if (!is_internal()) { 6063 if (log_is_enabled(Info, class, load)) { 6064 ResourceMark rm; 6065 const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string(); 6066 ik->print_class_load_logging(_loader_data, module_name, _stream); 6067 } 6068 6069 if (ik->minor_version() == JAVA_PREVIEW_MINOR_VERSION && 6070 ik->major_version() != JAVA_MIN_SUPPORTED_VERSION && 6071 log_is_enabled(Info, class, preview)) { 6072 ResourceMark rm; 6073 log_info(class, preview)("Loading preview feature type %s", ik->external_name()); 6074 } | 1483 BAD_ALLOCATION_TYPE, // 0 1484 BAD_ALLOCATION_TYPE, // 1 1485 BAD_ALLOCATION_TYPE, // 2 1486 BAD_ALLOCATION_TYPE, // 3 1487 NONSTATIC_BYTE , // T_BOOLEAN = 4, 1488 NONSTATIC_SHORT, // T_CHAR = 5, 1489 NONSTATIC_WORD, // T_FLOAT = 6, 1490 NONSTATIC_DOUBLE, // T_DOUBLE = 7, 1491 NONSTATIC_BYTE, // T_BYTE = 8, 1492 NONSTATIC_SHORT, // T_SHORT = 9, 1493 NONSTATIC_WORD, // T_INT = 10, 1494 NONSTATIC_DOUBLE, // T_LONG = 11, 1495 NONSTATIC_OOP, // T_OBJECT = 12, 1496 NONSTATIC_OOP, // T_ARRAY = 13, 1497 NONSTATIC_OOP, // T_VALUETYPE = 14, 1498 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1499 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1500 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1501 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1502 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1503 BAD_ALLOCATION_TYPE, // T_CONFLICT = 20, 1504 BAD_ALLOCATION_TYPE, // 0 1505 BAD_ALLOCATION_TYPE, // 1 1506 BAD_ALLOCATION_TYPE, // 2 1507 BAD_ALLOCATION_TYPE, // 3 1508 STATIC_BYTE , // T_BOOLEAN = 4, 1509 STATIC_SHORT, // T_CHAR = 5, 1510 STATIC_WORD, // T_FLOAT = 6, 1511 STATIC_DOUBLE, // T_DOUBLE = 7, 1512 STATIC_BYTE, // T_BYTE = 8, 1513 STATIC_SHORT, // T_SHORT = 9, 1514 STATIC_WORD, // T_INT = 10, 1515 STATIC_DOUBLE, // T_LONG = 11, 1516 STATIC_OOP, // T_OBJECT = 12, 1517 STATIC_OOP, // T_ARRAY = 13, 1518 STATIC_OOP, // T_VALUETYPE = 14, 1519 BAD_ALLOCATION_TYPE, // T_VOID = 15, 1520 BAD_ALLOCATION_TYPE, // T_ADDRESS = 16, 1521 BAD_ALLOCATION_TYPE, // T_NARROWOOP = 17, 1522 BAD_ALLOCATION_TYPE, // T_METADATA = 18, 1523 BAD_ALLOCATION_TYPE, // T_NARROWKLASS = 19, 1524 BAD_ALLOCATION_TYPE, // T_CONFLICT = 20 1525 }; 1526 1527 static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type, bool is_flattenable) { 1528 assert(type >= T_BOOLEAN && type < T_VOID, "only allowable values"); 1529 FieldAllocationType result = _basic_type_to_atype[type + (is_static ? (T_CONFLICT + 1) : 0)]; 1530 assert(result != BAD_ALLOCATION_TYPE, "bad type"); 1531 if (is_flattenable) { 1532 result = is_static ? STATIC_FLATTENABLE : NONSTATIC_FLATTENABLE; 1533 } 1534 return result; 1535 } 1536 1537 class ClassFileParser::FieldAllocationCount : public ResourceObj { 1538 public: 1539 u2 count[MAX_FIELD_ALLOCATION_TYPE]; 1540 1541 FieldAllocationCount() { 1542 for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) { 1543 count[i] = 0; 1544 } 6002 Handle module_handle(THREAD, module_entry->module()); 6003 6004 // Allocate mirror and initialize static fields 6005 // The create_mirror() call will also call compute_modifiers() 6006 java_lang_Class::create_mirror(ik, 6007 Handle(THREAD, _loader_data->class_loader()), 6008 module_handle, 6009 _protection_domain, 6010 CHECK); 6011 6012 assert(_all_mirandas != NULL, "invariant"); 6013 6014 // Generate any default methods - default methods are public interface methods 6015 // that have a default implementation. This is new with Java 8. 6016 if (_has_nonstatic_concrete_methods) { 6017 DefaultMethods::generate_default_methods(ik, 6018 _all_mirandas, 6019 CHECK); 6020 } 6021 6022 // Add read edges to the unnamed modules of the bootstrap and app class loaders. 6023 if (changed_by_loadhook && !module_handle.is_null() && module_entry->is_named() && 6024 !module_entry->has_default_read_edges()) { 6025 if (!module_entry->set_has_default_read_edges()) { 6026 // We won a potential race 6027 JvmtiExport::add_default_read_edges(module_handle, THREAD); 6028 } 6029 } 6030 6031 int nfields = ik->java_fields_count(); 6032 if (ik->is_value()) nfields++; 6033 for (int i = 0; i < nfields; i++) { 6034 if (ik->field_access_flags(i) & JVM_ACC_FLATTENABLE) { 6035 Symbol* klass_name = ik->field_signature(i)->fundamental_name(CHECK); 6036 // Value classes must have been pre-loaded 6037 Klass* klass = SystemDictionary::find(klass_name, 6038 Handle(THREAD, ik->class_loader()), 6039 Handle(THREAD, ik->protection_domain()), CHECK); 6040 assert(klass != NULL, "Sanity check"); 6041 assert(klass->access_flags().is_value_type(), "Value type expected"); 6042 ik->set_value_field_klass(i, klass); 6043 klass_name->decrement_refcount(); 6044 } else if (is_value_type() && ((ik->field_access_flags(i) & JVM_ACC_FIELD_INTERNAL) != 0) 6045 && ((ik->field_access_flags(i) & JVM_ACC_STATIC) != 0)) { 6046 ValueKlass::cast(ik)->set_default_value_offset(ik->field_offset(i)); 6047 } 6048 } 6049 6050 if (is_value_type()) { 6051 ValueKlass::cast(ik)->initialize_calling_convention(CHECK); 6052 } 6053 6054 // Update the loader_data graph. 6055 record_defined_class_dependencies(ik, CHECK); 6056 6057 ClassLoadingService::notify_class_loaded(ik, false /* not shared class */); 6058 6059 if (!is_internal()) { 6060 if (log_is_enabled(Info, class, load)) { 6061 ResourceMark rm; 6062 const char* module_name = (module_entry->name() == NULL) ? UNNAMED_MODULE : module_entry->name()->as_C_string(); 6063 ik->print_class_load_logging(_loader_data, module_name, _stream); 6064 } 6065 6066 if (ik->minor_version() == JAVA_PREVIEW_MINOR_VERSION && 6067 ik->major_version() != JAVA_MIN_SUPPORTED_VERSION && 6068 log_is_enabled(Info, class, preview)) { 6069 ResourceMark rm; 6070 log_info(class, preview)("Loading preview feature type %s", ik->external_name()); 6071 } |