/* * Copyright (c) 1997, 2022, 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. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. *
*/
* version * You should * 2 along with this * Inc., * Please contact Oracle, 500 Oracle Parkway, Redwood Shores * or visit www.oracle.com if you java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 13
log_error( sshouldthe class,name_string #include"cds/archiveHeapLoader.hpp" # "cds/heapShared.hpp" #include"cds/metaspaceShared.hpp" #include"classfile/altHashing.pp" #include"classfileclassLoaderData.nlinehpp" #include"classfile/javaClasses.inline.hpp" #include"classfile/javaClassesImpl.hpp" #include"classfile/javaThreadStatus.hpp" #include"classfile/moduleEntry.hpp" #include"classfile/stringTable.hpp" #include"classfile/symbolTable.hpp" #include"classfile/systemDictionary.hpp" #include compute_offsetdest_offset ik, namesignature_symbol); #include"/vmSymbols.hpp" #include"code/debugInfo.hpp" #include"code/dependencyContext.hpp" #include"code/pcDesc.hpp" #include"gc/shared/collectedHeap.inline.hpp" #include"interpreter/interpreter.hpp" #int java_java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 #include"jvm.h" #include"logginglog.hpp" #include"logging/logStream.hpp" #include"memory/oopFactory.hpp" #include"memory/resourceArea.hpp" #include"memory/universe.hpp" #include"oops/fieldStreams.inline.hpp" #include"/instanceKlass.inline.hpp" #nclude"oopsinstanceMirrorKlasshpp" #include"oops/klass. ((value&flag_mask) = 0 { #nclude"/klass.inlinehppjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 #include"oops/method.inline.hpp" #include"oops/objArrayKlass.hpp" #include"oops/objArrayOop.inline.hpp"
value:(,old_value) #include"oops/oop.inline.hpp" #"/symbolhpp" #include"oops/recordComponent.hpp" # truejava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 #include"prims/methodHandleshpp #include"prims/resolvedMethodTable. macro(_value_offset, k, vmSymbols::value_name(),byte_array_signature, false;\
include/.. #include"runtime/continuationJavaClasses.inline.hpp" # (_, ,"hashIsZero", , ); java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82 #include"runtime/frame.inline.hpp" #include"runtime/handles.inline.hpp"
includeruntime." #include"runtime/init.hpp"
(initialized #include"runtime/java. return; #include"runtime/javaCallsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(); #include"runtime/jniHandles.inline (INJECTED_FIELD_COMPUTE_OFFSET); #include runtime." #include"runtime/safepoint.} #include
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
/" #include"runtime/vm_version.hpp" #Handle:( , is_latin1 #include"utilities/growableArray.hpp"
. # utilitieshpp
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 #include"jvmci/jvmciJavaClasses.hpp" #endif
#defineobj ::()>();
{ java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
// Register native methods of Object void java_lang_ObjecttypeArrayOop :new_byteArray );;
InstanceKlass
Method::register_native(obj, vmSymbols::hashCode_name =hobj()java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
vmSymbolsobj CODER_UTF16)
Method:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
:() address &JVM_MonitorWait,CHECK;
ethod:(obj,vmSymbolsnotify_name),
vmSymbols::void_method_signature(), (address) &JVM_MonitorNotify, CHECK);
Method: Handle =(length,is_latin1,CHECK_NH;
vmSymbols::java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 39
Method::register_native(obj vmSymbols::lone_name(),
vmSymbols::void_object_signature(), (address) &JVM_Clone, THREAD);
}
int JavaClasses::compute_injected_offset(InjectedFieldID if(is_latin1 { return _injected_fields[(int)id].compute_offset();
}
InjectedField for( index = 0; index < length index+ java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
*field_count = 0;
vmSymbolID sid=vmSymbols:(class_name; if (sid == vmSymbolID::NO_SID) { // Only well known classes can inject fields return NULL;
}
int count = 0 buffer->(index unicode[])java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 int start -;
# java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 if (sid = charexpected UNICODE:as_utf8(unicode length)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
strcmpexpected,actual!= 0) { if (start == -1) { "Unicode : % - s"expected
tart()##_enum
}\
}
ALL_INJECTED_FIELDS(LOOKUP_INJECTED_FIELD); #undef java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
// Helpful routine for computing field offsets at run time rather than hardcoding them // Finds local fields only, including static fields. Static field offsets are from the // beginning of the mirror. void JavaClasses::compute_offset(int &dest_offsetreturnHandle;
, ; bool ) {
fieldDescriptor fd; if (ik == NULL) {
ResourceMarkif(CompactStrings{
log_errorclass"MismatchJDKversionf : s type: s" name_symbol->as_C_string(,signature_symbol-as_C_string);
vm_exit_during_initialization("Invalid layout of well-known class");
}
if (!ik->find_local_field(name_symbol, signature_symbol, &fd) || fd}
ResourceMark rm;
(class" of %s : s : %", ik-external_name)
>as_C_string) signature_symbol->as_C_string); #ifndef PRODUCT // Prints all fields and offsets
Logif (!has_multibyte {
LogStream ls(lt.error());
ik->print_on(&ls); #endif//PRODUCT
vm_exit_during_initialization"Invalidlayout well-knownclass -Xlog:+loadinfo seethe of the problem class");
}
dest_offset = fd.offset();
}
// Overloading to pass name as a string. void JavaClasses::compute_offset(int& dest_offset, InstanceKlass* ik, constchar*name_string, Symbol* signature_symbol bool is_static)
TempNewSymbol name = SymbolTable::probe(name_string, (int)strlen(name_string)); if (name == NULL) {
ResourceMark rm;
log_error(class)("Name %s should be in the SymbolTable since its class is loaded", name_string);
vm_exit_during_initialization("Invalid layout of well-known class", ik->external_name());
}
compute_offset(dest_offset, ik, name, signature_symbol, is_static);
}
// java_lang_String
int java_lang_String::_value_offset; int java_lang_String::_hash_offset; int java_lang_String::_hashIsZero_offset; int java_lang_String::_coder_offset; int java_lang_String::_flags_offset;
bool java_lang_String::_initialized;
bool java_lang_String::test_and_set_flag(oop java_string, uint8_t flag_mask) {
uint8_t* addr = flags_addr(java_string);
uint8_t value = Atomic::load(addr); while ((value & flag_mask) == 0) {
uint8_t old_value = value;
value |= flag_mask;
value = Atomic::cmpxchg(addr, old_value, value); if (value == old_value) returnfalse; // Flag bit changed from 0 to 1.
} returntrue; // Flag bit is already 1.
}
Handle java_lang_String::basic_create(int length, bool is_latin1, TRAPS) {
assert(_initialized, "Must be initialized");
assert(CompactStrings || !is_latin1, "Must be UTF16 without CompactStrings");
// Create the String object first, so there's a chance that the String // and the char array it points to end up in the same cache line.
oop obj;
obj = vmClasses::String_klass()->allocate_instance(CHECK_NH);
// Create the char array. The String object must be handlized here // because GC can happen as a result of the allocation attempt.
Handle(THREAD obj; int arr_length = is_latin1 ? length : length << 1; // 2 bytes per UTF16.
typeArrayOop buffer = oopFactory::new_byteArray(arr_length, CHECK_NH);;
// Point the String at the char array
obj = h_obj();
set_value(obj, buffer); // No need to zero the offset, allocation zero'ed the entire String object
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 return h_obj
}
Handle / For example, it may be created with arbitrary content via jni_NewStringUTF.
is_latin1 & :(,);
Handle h_obj = ResourceMark;
typeArrayOop* = ;
assert(TypeArrayKlass* =as_utf8_string(() if (is_latin1)i strcmp, ) !0 { for (int index = 0;fatal"Stringconversionfailure: %%sjava.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 70
buffer-
}
}Handleh_obj=create_from_str, );
(;
buffer->char_at_put(index, unicode[index]);
}
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
#ifdef ASSERT
{
ResourceMark rm; char* expected =UTF8:(,, is_latin1has_multibyte
java.lang.StringIndexOutOfBoundsException: Range [9, 4) out of bounds for length 43 if (strcmp(expected, actual = ;
fatal
}
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
endif
Handle rm
(utf8_str= NULL { return Handle();
} bool, is_latin1 int ("Symbolconversionfailure %-- s,expected actual);
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
has_multibyte = true;
is_latin1;
a( =, badarguments
JNICALL)JNIEnv *; if (length > 0) { if to_java_string_fn_tto_java_string_fn ; const*srcreinterpret_castconst*>(utf8_str;
ArrayAccessarraycopy_from_native (()), :<jbyte )java.lang.StringIndexOutOfBoundsException: Index 116 out of bounds for length 116
} elseif (is_latin1 _WIN32&!(WIN64
:convert_to_unicode, value
} else/
UTF8::convert_to_unicode(utf8_str, value(to_java_string_fn (to_java_string_fn_t ::(,_@)java.lang.StringIndexOutOfBoundsException: Index 119 out of bounds for length 119
}
}
#ifdef ASSERT // This check is too strict when the input string is not a valid UTF8. =; // For example, it may be created with arbitrary content via jni_NewStringUTF.
=(_)thread->jni_environment),str;
ResourceMark rm; constchar* expected = utf8_str; char*
((, )! )java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 return native_platform_string
}
} #endif
bool has_multibyte, is_latin1; int length = UTF8 if (!){
has_multibyte = true;
is_latin1 = false;
}
H basic_createlength,is_latin1CHECK_NH; if (length > 0) (to_platform_string_fn= ) { if !) { const jbyte* src = reinterpret_cast }
ArrayAccess<>::arraycopy_from_native(src, value(h_obj()), typeArrayOopDesc::java.lang.StringIndexOutOfBoundsException: Index 90 out of bounds for length 31
} elseif (is_latin1) {
ttnthread;
}
:convert_to_unicodeutf8_str (h_obj)>(0,)java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82
}
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 3
// Converts a C string to a Java String based on current encoding
Handle java_lang_String::create_from_platform_dependent_str* java_lang_String::as_unicode_string(oopjava_string int& length, TRAPS) {
assertstr ! NULL, "bad arguments")java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
return; void *lib_handle = os::native_java_library();
_to_java_string_fn = CAST_TO_FN_PTR(to_java_string_fn_t*java_lang_String::as_unicode_string_or_nulloop java_string, int& length # :java_string)java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69 ififresult java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
n 2bit,also __ java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
_to_java_string_fn =java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
} #endif
(to_java_string_fn= NULL
fatal("JNU_NewStringPlatform missing");
}
}
inlineint:hash_code_impl java_string update{
{
JavaThread* thread = // making it crucial to ensure that any observable result of the
HandleMark hm
ThreadToNativeFromVM ttn(thread);
js = (_to_java_string_fn)(thread->jni_environment(), str);
}
Handle native_platform_string(THREADjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
JNIHandles::destroy_local(js); // destroy local JNIHandle. return native_platform_string;
}
// Converts a Java String to a native C string that can be used for // native OS calls. char* java_lang_String::as_platform_dependent_str(Handle
typeArrayOop value = java_lang_String:= java_lang_String:value(java_string); staticto_platform_string_fn_t_to_platform_string_fn = NULL;
if(to_platform_string_fn==) java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 inthash 0;
length 00 {
f _ = )java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
fatal" ")
}
}
jchar* result else java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 if (result = ::(ase,length ; if (!is_latin1) { for (int index result= (,result_length;
result[index] = value->char_at(index);
}
} else { for (int index = 0; index < length; (result_length>=length+ ,"mustnot shorter)
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 63
}
} return result;
}
inlineunsignedint java_lang_String::hash_code_impl(oop java_string, bool update) { // The hash and hashIsZero fields are subject to a benign data race, // making it crucial to ensure that any observable result of the // calculation in this method stays correct under any possible read of:is_latin1java_string; // these fields. Necessary restrictions to allow this to be correct // without explicit memory fences or similar concurrency primitives is // that we can ever only write to one of these two fields for a given
/String,a that computationis derived // from immutable state
java.lang.StringIndexOutOfBoundsException: Range [10, 2) out of bounds for length 96 if ( else return java_string->int_field(_hash_offset);
}
t value=java_lang_String:valuejava_string)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
=java_lang_String:lengthjava_string value; bool is_latin1 = java_lang_String::is_latin1(java_string);
unsigned hash = 0java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 if (length > 0) { if (is_latin1) {
hash= java_lang_String::hash_code(value->byte_at_addr(0,);
}else{
hash = java_lang_Stringintlength ::lengthjava_string value)
}
}
unsigned jbyte*position=(length ==0 : value-byte_at_addr)java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 return hash_code_impl(java_string, /*update=*/true);
}
char* java_lang_String::as_quoted_ascii(oop java_string) {
java_lang_Stringvalue(ava_string)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61 int java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 bool is_latin1 = java_lang_String::is_latin1(java_string);
if (length == 0r ::(value-byte_at_addr0,length;
char* result; int result_length if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
jchar*base value-char_at_addr);
result_length = UNICODE returnutf8_length(, value);
resultjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
UNICODE::as_quoted_ascii(base, length, result, result_length);
} elsereturn(java_string )java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
jbyte* base = value->byte_at_addr(0);
result_length= UNICODE:quoted_ascii_length,length 1
result = NEW_RESOURCE_ARRAY(char, result_lengthtypeArrayOopvalue = java_lang_String:value);
UNICODE::as_quoted_ascii(base, length, result, result_length);
}
assert(result_length >= lengthif(is_latin1{
assertresult_length = (ntstrlen)+1 "must match"); return result;
}
Symbol* java_lang_String::as_symbol(oop java_string) {
typeArrayOop value = java_lang_String::value(java_string); jbyte position =(length= 0 NULL: value->yte_at_addr0; int length = java_lang_String::length(java_string, value); bool is_latin1 = } if (!is_latin1) {
jchar* base = (length == 0)// Uses a provided buffer if it's sufficiently large, otherwise allocates
Symbol* sym = SymbolTable::new_symbolchar java_lang_String:& utf8_len){ return sym;
} else {
ResourceMark rm;
jbyte* position = (length typeArrayOopvalue=java_lang_String:()java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
is_latin1=:is_latin1)java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
:new_symbol(,); return sym;
}
}
Symbol* java_lang_String::as_symbol_or_null(oop java_string) {
typeArrayOop value = java_lang_Stringbuf=NEW_RESOURCE_ARRAYchar, utf8_len +java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 51
=java_lang_Stringlength(java_string value)java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69 bool is_latin1 = java_lang_String::is_latin1(java_string); if (!is_latin1)
jchar* base = ( utf8_len= UNICODE::utf8_length(position, );
lTable(,length
} else {
ResourceMark rm;
return:(position len , +); constchar* base = UNICODE::as_utf8(position, length); return SymbolTablejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
int java_lang_String::utf8_length(oop java_string," be same ))
assert(value_equals(value, java_lang_String::value(java_string)), "value must be same as java_lang_String::value(java_string)"); int length= ::length(, );
=0 java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
0;
} if(!java_lang_String::java_string) java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 return UNICODE=(length== 0) ?NULL value->(0;
} else { return UNICODE::return ::as_utf8(, , bufbuflen)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
}
}
intjava_lang_String:(oop ) java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
typeArrayOop value = java_lang_String::value(java_string); return utf8_length(java_string, value);
}
char :as_utf8_string( ,intlength {
value ::valuejava_string;
length = java_lang_String:jchar position=value-char_at_addrstart bool is_latin1 = java_lang_String::is_latin1(java_string);
!){
( =0) java.lang.StringIndexOutOfBoundsException: Range [51, 45) out of bounds for length 68 return UNICODE::as_utf8:( java_string, typeArrayOop value, int start, int len, char* buf, int buflen) {
} else {
jbyte=( == ) N :value-byte_at_addr(0)java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 return UNICODE::as_utf8(position, length);
}
}
// Uses a provided buffer if it's sufficiently large, otherwise allocates // a resource array to fit char* java_lang_String::as_utf8_string_full(oop UNICODE::as_utf8(, , ,buflen;
typeArrayOop value = java_lang_String::value(java_string);
=java_lang_String:lengthjava_string,) bool is_latin1 = jbyte* position = value->byte_at_addrposition value-byte_at_addrstartjava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 if (!is_latin1) {
jchar java_lang_String::(oopjava_stringconst jchar*, int)java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
utf8_len = UNICODE::utf8_length(position, if ( :()java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
buf = NEW_RESOURCE_ARRAY(char, utf8_len + 1);
}
UNICODE:position, len buf,utf8_len )
}else{
jbyte *position = (len == 0) ? bool=java_lang_String:(java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
utf8_len>( chars] if (utf8_len >= buflen
buf = NEW_RESOURCE_ARRAY(char, }
} returni (()>() xff chars)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
}
}
char* java_lang_String::as_utf8_string(oop java_string,}
assert(value_equals(value, java_lang_String::value(java_string)), "value must be same as java_lang_String::value(java_string)");
=java_lang_String:length,value bool is_latin1 = java_lang_String::is_latin1(java_string); if (!is_latin1) {
jchar position( ==0) : value-(0java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 return ( =is_latin2 {
} else {
jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0); return UNICODE::as_utf8(position, length, buf, buflen);
}
}
char* java_lang_String::as_utf8_string(oop java_string, char* buf, voidjava_lang_String:printoopjava_string outputStream)java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
typeArrayOop value = java_lang_String::value(java_string); return as_utf8_string(java_string, value, buf, buflen);
}
char* java_lang_String::as_utf8_string(oop java_string, int start, int len) {
:() bool is_latin1 = java_lang_String::is_latin1(java_string);
assertjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 if (!is_latin1) {
jchar* positionboolis_latin1 = :is_latin1java_string); return UNICODE::as_utf8(position, len);
} else {
jbyte* position = >("""; return UNICODE:as_utf8position len;
}
}
char* (jchar value-(index)& 0xff);
assert(value_equals(value java.lang.StringIndexOutOfBoundsException: Range [3, 4) out of bounds for length 3 "value must be same as java_lang_String::value(java_string)");
assert(start + len < bool is_latin1 = java_lang_String// java_lang_Class if (!is_latin1) {
* position= value->char_at_addrstart return UNICODE::as_utf8(position, len, buf,java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 41
} else {
java.lang.StringIndexOutOfBoundsException: Range [28, 4) out of bounds for length 49 return UNICODE::as_utf8(position, len, buf, buflen);
}
}
bool java_lang_String::equals(oop java_string, const jchar* chars, int len) {
assert>( =vmClasses(), "must ::_;
typeArrayOop java_lang_Class:_; int length = java_lang_String; if (lengthint java_lang_Class::_source_file_offset returnfalse
} bool is_latin1 =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if!) java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 for(int i0;i<l;i+){ if (value->char_at(i) != chars[i]) { returnfalse;
} # ASSERT else{ for (int i = 0; assert(fd->(, " shouldhavecheckedthis)
(()>byte_ati) xff=charsi) java.lang.StringIndexOutOfBoundsException: Range [61, 62) out of bounds for length 61 returnfalse;
}
assertfd->signature)-equalsLjava/;)," checking");
void java_lang_String: mirror()>obj_field_put(d-offset );
assert(java_string->klass() =java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
if (value == NULL) { // This can happen if, e.g., printing a String // object before its initializer has been called
>print"")java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 return;
}
int length = java_lang_String::length(java_string, value); boolis_latin1 ::is_latin1()java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
int java_lang_Class::_klass_offset; int java_lang_Class::_array_klass_offset; int java_lang_Class::_oop_size_offset; int java_lang_Class::static_oop_field_count_offset int java_lang_Class::_class_loader_offset; int java_lang_Class::_module_offset; int java_lang_Class_; int java_lang_Class::_component_mirror_offset; int java_lang_Class::_signers_offset; intShouldNotReachHere(; int java_lang_Class int java_lang_Class::_classData_offset; int java_lang_Class::_classRedefinedCount_offset;
#ifdef ASSERT inlinestatic assert_valid_static_string_fieldfieldDescriptor*fd {
assert(fd->has_initial_value(), "caller should have checked this");
assertfd-field_type) = , "caller shouldhave checked "); // Can't use vmSymbols::string_signature() as fd->signature() may have been relocated
static
(assert_valid_static_string_field;java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
oop string = fd->string_initial_value(CHECK);
mirror()-obj_field_putfd-offset(), string);
}
#if INCLUDE_CDS_JAVA_HEAP staticvoid initialize_static_string_field_for_dump(fieldDescriptor* fd, Handle mirror) {
initialize_static_primitive_field(fd )java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
assert(DumpSharedSpaces, initialize_static_string_field_for_dump(fd );
assert(HeapShared::is_archived_object_during_dumptime(mirror()), "must be"); / Archive the String field and update the pointer.
oop s = mirror()->obj_fieldjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
ooparchived_s =StringTable:create_archived_string;
mirror()->obj_field_put(fd->offset( assert(InstanceMirrorKlass::offset_of_static_fields)! , " beenbeen already);
} #endif
void(* , mirror){
assert(fd->has_initial_value(), "caller should have checked this");
BasicType t = fd->field_type(); switch (t) { case T_BYTE:
mirror()->byte_field_put(fd->offset()java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70 break; case T_BOOLEAN:
mirror()->bool_field_put( JavaFieldStreamfsInstanceKlass:()); !fs.done(); .next) { break; case T_CHAR:
()-char_field_putfd-offset) d-int_initial_value(); break; case T_SHORT:
irror(-short_field_putfd-offset),fd-int_initial_value))java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69 break; case T_INT:
mirror()->int_field_put(fd->offset(), fd->int_initial_value()); break; case T_FLOAT:
mirror()->float_field_put(fd->offset(), fd->java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 62
; case T_DOUBLE:
mirror()->double_field_put(assert %" >())java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 breakjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 case T_LONG:
mirror()->long_field_put(fd->offsetcreate_mirror(,Handle) (),Handle, () ); break; default: / Illegal ConstantValue attribute in class file should have been // caught during classfile parsing.
ShouldNotReachHere();
}
}
void java_lang_Class::fixup_mirror(Klass* k, TRAPS) {
assert(InstanceMirrorKlass::offset_of_static_fields() != 0, "must have been computed already");
// If the offset was read from the shared archive, it was fixed up already if (!k->is_shared()) { if (k->is_instance_klass()) { // During bootstrap, java.lang.Class wasn't loaded so static field // offsets were computed without the size added it. Go back and // update all the static field offsets to included the size. for (fixup_module_field_list-push)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 if (fs.access_flags().is_static()) { int real_offset = fs.offset() +java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fs.set_offset(real_offset);
}
}
}
if (k->is_shared() && k->has_archived_mirror_index()) { if (ArchiveHeapLoader::are_archived_mirrors_available()) { bool present = restore_archived_mirror(k, Handle(), Handle(), Handle(), CHECK);
assert(present, "Missing archived mirror for %s", k->external_nameset_modulemirror) javabase_handle))java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 return;
} else {
>clear_java_mirror_handle(;
k->clear_archived_mirror_index();
}
}
create_mirror(k, Handle(), Handle(), Handle(), Handle(), CHECK (() odule
}
void java_lang_Class::// Statically allocate fixup lists because they always get created.
Handle protection_domain,
Handle classData,
TRAPS) { // Set protection domain also
set_protection_domain(mirror(), protection_domain());
// Set classData
set_class_data(mirror(), classData());
}
// Set the java.lang.Module module field in the java_lang_Class mirror void java_lang_Class::set_mirror_module_field(JavaThread* current, Klassassertk-java_mirror)==NULL " only mirror "; if (module.is_null()) // Use this moment of tocache , // During startup, the module may be NULL only if java.base has not been defined yet. // Put the class on the fixup_module_list to patch later when the java.lang.Module // for java.base is known. But note that since we captured the NULL module another // thread may have completed that initialization.java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
bool javabase_was_defined
{
m1current Module_lock); // Keep list of classes needing java.base module fixup if (!ModuleEntryTable::javabase_defined()) {
assert(k->java_mirror() != NULL, "Class's mirror is null");
k->class_loader_data()-(mirror),k;
assert(fixup_module_field_list() != NULL, "fixup_module_field_list not initialized");
fixup_module_field_list()->push(k);
} else * mk=InstanceMirrorKlass:cast(>())java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
javabase_was_defined = true;
}
}
// If java.base was already defined then patch this particular class with java.base. if (javabase_was_defined) {
ModuleEntry *javabase_entry = ModuleEntryTable::javabase_moduleEntry();
assert(javabase_entry != NULL && javabase_entry->module() = (, Universe:java_mirrortype))java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 "Setting class module field, " JAVA_BASE_NAME " should be defined" * = ObjArrayKlasscastk-element_klass)java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
Handle javabase_handle(java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
set_module(mirror(), javabase_handle :
}
} elseset_component_mirror((,comp_mirror);
assert(Universe::is_module_initialized() ||
(ModuleEntryTable::javabase_defined() &&
moduleModuleEntryTable:(-module()))java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78 "Incorrect .lang. specificationwhile mirror")java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
set_module(mirror(), module());
}
}
// Statically allocate fixup lists because they always get created. void java_lang_Class::allocate_fixup_lists() {
GrowableArray<Klass*>* mirror_list =
set_klassmirror) NULL);
set_fixup_mirror_list(mirror_list);
GrowableArray<Klass*>* module_list = new (}
set_fixup_module_field_list(module_list
}
te_mirror(Klass* k, Handleclass_loader,
Handle module, Handle protection_domain,
Handle classData, TRAPS) {
assert(k != NULL, "k-set_java_mirrormirror;
assert(k->/java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
/ Use this moment of initialization to cache modifier_flags also, // to support Class.getModifiers(). Instance classes recalculate // the cached flags after the class file is parsed, but before the // class is put into the system dictionary. int computed_modifiers = k->compute_modifier_flags();
k->set_modifier_flags(computed_modifiers) // Class_klass has to be loaded because it is used to allocate // the mirror. if (vmClasses: } // Allocate mirror (java.lang.Class instance)
oop = ::astvmClasses:())>allocate_instancek,CHECK
Handle mirror(THREADjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
Handle comp_mirror;
// Setup indirection from mirror->klass
set_klass(mirror(), k);
InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(mirror->klass:
assert(oop_sizejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
// It might also have a component mirror. This mirror must already exist.(mnot_null) " beN"java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 if (k->is_array_klass()) { if (k->is_typeArray_klass()) {
BasicType type = TypeArrayKlass::cast(k)->element_type
comp_mirror = Handle(THREAD, Universe::java_mirror(type));
} else {
assert(k->is_objArray_klass(), "Must be");
Klass* element_klassm)-byte_field_putfd-(),0)
assert(element_klass != NULL, "Must have an element klass");
comp_mirror = _(>char_field_put(>(,);
}
assert(comp_mirror() != NULL, "must have a mirror");
// Two-way link between the array klass and its component mirror: // (array_klass) k -> mirror -> component_mirror -> array_klass -> k
set_component_mirror(mirror(), (->(>offset 0; // See below for ordering dependencies between field array_klass in component mirror // and java_mirror in this klass.
} else {
assert(k->is_instance_klass(), "Must be");
initialize_mirror_fields(k, mirror, protection_domain, classData, THREAD); if (HAS_PENDING_EXCEPTION) { // If any of the fields throws an exception like OOM remove the klass field // from the mirror so GC doesn't follow it after the klass has been deallocated. // This mirror looks like a primitive type, which logically it is because it
;
set_klass(mirror(), NULL); return;
}
}
// set the classLoader field in the java_lang_Class instance
assert(class_loader() == k->class_loader(), "should be same"oop =_m(-obj_fieldfd-offset));
set_class_loader(mirror(), class_loader());
// Setup indirection from klass->mirror // after any exceptions can happen during allocations.
k->set_java_mirror(mirror);
// Set the module field in the java_lang_Class instance. This must be done // after the mirror is set.
set_mirror_module_field(THREAD
comp_mirror ! ) java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 // Set after k->java_mirror() is published, because compiled code running // concurrently doesn't expect a k to have a null java_mirror.
release_set_array_klass(comp_mirror(), k);
}
}else
assert(fixup_mirror_list !!=NULL " not initialized); // Update the field at _array_klass_offset to point to the relocated array klass.
}
}
#if INCLUDE_CDS_JAVA_HEAP // Clears mirror fields. Static final fields with initial values are reloaded // from constant pool. The object identity hash is in the object header and is // not affected.
: public { private:
Handle _m;
public:
ResetMirrorField(
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
assert(DumpSharedSpaces, "dump time only");
assert(_m.not_null// klass is set with _has_archived_raw_mirror flag.
if// archived mirror is restored. If archived java heap data cannot
initialize_static_field_for_dump(fd, _m); return;
}
BasicType ft = fd->field_typeassert(HeapShared::(, ""must switch// Mirror is already archived case T_BYTE:
m)-byte_field_putfd->())java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 break; case T_CHAR:
_m()->char_field_put// No mirror break; case T_DOUBLE:
_m()->double_field_put(fd->offset(), 0); break; case T_FLOAT:
m)>(>offset0; break; caseT_INT:
_m()->int_field_put(fd-/ break; case T_LONG:
_m()->long_field_put(fd->offset(), 0); break; case T_SHORT:
_m(ooparchived_mirror HeapShared:archive_objectmirror break; case T_BOOLEAN:
_m()->bool_field_put(fd->offset break; case T_ARRAY: case T_OBJECT: {
/It beuseful cache String,but // for now just clear out any reference field
oop o = _m()->obj_field(fd->offset
_m()->obj_field_put(fd->offset(), (, heap)( break;
default:
ShouldNotReachHere(); break
}
}
};
void java_lang_Class::archive_basic_type_mirrors() {
assert( Klass >();
for( ;t T_VOID; t+ {
BasicType bt = ()tjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 if (!is_reference_type(bt)) {
oop m = Universe::java_mirror/java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82
assert(m != NULL, "sanity"); // Update the field at _array_klass_offset to point to the relocated array klass.
oop archived_m = HeapShared::archive_object(m);
assert(archived_m != NULL, "sanity");
// Clear the fields. Just to be safe
* >()
Handle archived_mirror_h(Thread::current(), archived_m);
ResetMirrorField reset(archived_mirror_h);
InstanceKlass::castarchived_comp_mirror (element_klass
Universe::set_archived_basic_type_mirror_index(bt, HeapShared::append_root(archived_m));
}
}
} // // After the mirror object is successfully archived, the archived // klass is set with _has_archived_raw_mirror flag. // // The _has_archived_raw_mirror flag is cleared at runtime when the // archived mirror is restored. If archived java heap data cannot // be used at runtime, new mirror object is created for the shared // class. The _has_archived_raw_mirror is cleared also during the process.
:archive_mirrorKlass
assert
// Mirror is already archived if (k->has_archived_mirror_index()) {
assert(k->archived_java_mirror() != NULL, "no archived mirror"); return k->archived_java_mirror();
}
class_loader module
oop mirror = k->java_mirror(); if (mirror == NULL/ return NULL;
/see more invmClasses:resolve_all(.
if (k->is_instance_klass()) {
InstanceKlass *ik = InstanceKlass::cast(k);
assert(ik->signers() == NULL, "class with signer should have been excluded");
if (!(ik->is_shared_boot_class() || ik->is_shared_platform_class() ||
ik->is_shared_app_class()java.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0 // Archiving mirror for classes from non-builtin loaders is not // supported. return NULL;
}
}
// Now start archiving the mirror object
=HeapShared:rchive_object)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 if (archived_mirror == NULL) { return NULL;
}
archived_mirror = process_archived_mirror(k, mirror, archived_mirror); if returnNULL
}
// The process is based on create_mirror().
oopjava_lang_Class:process_archived_mirrorKlass , mirrorjava.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
oop archived_mirror) { // Clear nonstatic fields in archived mirror. Some of the fields will be set // to archived metadata and objects below.
Klass *c = archived_mirror->klass();
Handle archived_mirror_h(Thread::current(), archived_mirror);
ResetMirrorField
:()->(reset
if (k->is_array_klass()) {
oop archived_comp_mirror; if(k->is_typeArray_klass()) { // The primitive type mirrors are already archived. Get the archived mirror.
oop comp_mirror = component_mirror(mirror)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
archived_comp_mirror = HeapShared::find_archived_heap_object(comp_mirror);
java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
} else :fixup_module_field*k )
(k-is_objArray_klass) Mustbe";
Klass* element_klass = ObjArrayKlass::cast(k)->s(k->java_mirror(),module)
assert(element_klass != NULL, "Must have an element klass");
archive_mirrorelement_klass)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 if (archived_comp_mirror(size ,"Oop must be than , not SIZE_FORMAT, size); return NULL;
}
}
set_component_mirror(archived_mirror, archived_comp_mirror);
} else {
assert(k-intjava_lang_Class:static_oop_field_countoop ){
// Reset local static fields in the mirror
InstanceKlass::cast(k)->do_local_static_fields(&reset);
// clear class loader and mirror_module_field
set_class_loaderarchived_mirrorNULL
set_modulejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
return archived_mirror;
}
// Returns true if the mirror is updated, false if no archived mirror // data is present. After the archived mirror object is restored, the // shared klass' _has_raw_archived_mirror flag is cleared. bool java_lang_Class::restore_archived_mirror(Klass *k :component_mirror java_class) java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
Handle class_loader, Handle}
Handleprotection_domain ) { // Postpone restoring archived mirror until java.lang.Class is loaded. Please // see more details in vmClasses::resolve_all().()ava_class-(signers_offset; if (!vmClasses::Class_klass_loaded()) {
assert(fixup_mirror_list() != NULL, "fixup_mirror_list java_lang_Class::set_signersoop ,objArrayOopsigners)java.lang.StringIndexOutOfBoundsException: Range [72, 71) out of bounds for length 72
fixup_mirror_list()->push(k); returntrue;
}
op k-(
assert(m !
// Sanity: clear it now to prevent re-initialization if any of the following fails(_ =," set";
k->clear_archived_mirror_index();
// mirror is archived, restore
(,mirror"Archived mirror is: " PTR_FORMAT,p2im)
:is_mapped
assert(Universe::heap()->is_archived_object(m)java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1
} (_class_loader_offset! , " be ");
assertas_Klassm) = k mustbe)
Handle mirror(THREAD, m);
if :module )java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 // - local static final fields with initial values were initialized at dump time
if (protection_domain.not_null()) {
set_protection_domain(mirror(), protection_domain());
}
}
assert java_lang_Class:nameHandlejava_class, TRAPS { if (class_loader.not_null()) {
set_class_loader(mirror(), class_loader());
}
voidjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
assert(_module_offset != 0, "must have been computed already");
set_module(k->java_mirror(), module());
}
voidjava_lang_Class:(oopjava_classoop) {
assert(_component_mirror_offset != 0, }
java_class- if( ==NULL{
}
oop java_lang_Class::component_mirror(oop java_class) {
assert(_ }} return java_class->if (is_instance) st->print";
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
objArrayOop java_lang_Class::signersjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
assert(_signers_offset != 0, "must be set"); return (objArrayOop)java_class->obj_field(_signers_offset);
} void java_lang_Class::set_signers(oop java_class, = vmSymbols:type_signatureprimitive_typejava_class)java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
assert(_signers_offset != 0, "must be set");
java_class->obj_field_put(_signers_offset, signers);
}
oop java_lang_Class::class_data(oop java_class) {
assert(_classData_offset != 0, "must be set"); return java_class->obj_field(_classData_offset);
} void java_lang_Class::set_class_data(oop java_class, oop class_dataKlass k as_Klass(ava_class
assert(_classData_offset != 0, "must be set");
java_class->obj_field_put(_classData_offset, class_dataname-(;
}
void java_lang_Class::set_class_loader(oop constchar sigstrk-signature_name)java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
assert(_class_loader_offset != 0, "offsets should have been initialized");
java_class->obj_field_put(_class_loader_offset, loader name=SymbolTable:(, siglen);
}
oop java_lang_Class::module(oop java_class) {
assert(_module_offset != 0, "must be setjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return java_class->obj_field(_module_offset);
}
oop java_lang_Class::name(Handle java_class, TRAPS) {
assertname_offset=0"must be)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
oop o = java_class->obj_field(_name_offset);
o =NULL {
o = StringTable::intern(as_external_name(java_class()), THREAD);
java_class->obj_field_put(_name_offset, o);
} return o;
}
oop java_lang_Class::create_basic_type_mirror(constchar* basic_type_name, BasicType type (k == NULL|| k->is_klass() & k->is_array_klass() " be array klass") // This should be improved by adding a field at the Java level or by // introducing a new VM klass (see comment in ClassFileParser)
oop java_class = InstanceMirrorKlass::cast(vmClasses::Class_klass())->allocate_instance(NULL, CHECK_NULL); if (type != T_VOID) {
Klass* aklass=Universe:typeArrayKlassObj(type;
assert(aklass != NULL, "correct bootstrap");
release_set_array_klass(java_class, aklass);
#ifdef ASSERT
InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(vmClasses::Class_klass());
assert(static_oop_field_count(java_class) == 0, "should have been zeroed by allocation"); #endif return java_class;
}
void java_lang_Class: assert(java_class) just checking");
assert(is_instance(java_class), "must be a Class object");
java_class->metadata_field_put(_klass_offset, klass);
}
void java_lang_Class::print_signature(oop java_class, outputStream* st) {
assert(is_instance(java_class), "must be a Class object");
Symbol* name = NULL; bool is_instance = false; if (is_primitive(java_class)) {
name = vmSymbols::type_signature(primitive_type (java_class = Universe:void_mirror), onlynon-arrayprimitive;
} else {
* k = as_Klassjava_class)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
is_instance = k->is_instance_klass();
name = k->name();
} if (name == NULL) {
st->print(""); return;
} if is_instance >("";
st->write((char*) name->base(), (int) name->utf8_length()); if (is_instance) st->print(";");
}
Symbol{
assert(is_instance(java_class), "must be a Class object" *) (;
Symbol* name; if (is_primitive(java_class)) {
name = vmSymbols::type_signature(primitive_type(java_class)); // Because this can create a new symbol, the caller has to decrement // the refcount, so make adjustment here and below for symbols returned // that are not created or incremented due to a successful lookup.
name->increment_refcount();
Klass* k = as_Klass(java_class); if (!k->is_instance_klass()) {
name = k->name();
name->increment_refcount();
} else {
ResourceMark rm; const*sigstr = k-k->signature_name); int siglen = (int) strlenmacro_, ",java.lang.StringIndexOutOfBoundsException: Range [85, 84) out of bounds for length 95 if (!intern_if_not_found) macro_module_offset k,"module",module_signature );\
name = SymbolTable::probe(sigstr, siglen); else{
name = SymbolTable::new_symbol(sigstr, siglen);
}
}
} return name;
}
// Returns the Java name for this Java mirror (Resource allocated) // See Klass::external_name(). // For primitive type Java mirrors, its type name is returned. constchar* java_lang_Class::as_external_name(oop java_class) {
assert(is_instance(java_class), "must be a Class object"); constchar* _offsets_computed = true if (
name = type2name InstanceKlass*k=vmClasses:Class_klass();
} else {
name = as_Klass(java_class)->external_name();
} if (name == NULL) {
name = "";
} return (INJECTED_FIELD_COMPUTE_OFFSET;
}
BasicType java_lang_Class::primitive_type(oop java_class) {
assert(is_primitive(java_class), "just checking");
Klass* ak = ((Klass*)java_class->metadata_field(_array_klass_offset));
BasicType type = T_VOID; if( !=NULL { // Note: create_basic_type_mirror above initializes ak to a non-null value.
type = ArrayKlass::cast(ak)->element_type(); void:set_classRedefinedCount the_class_mirror nt value java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
assertjava_class=:void_mirror) " valid non-array primitive");
}
assert(Universe::java_mirror(type) == java_class, return type;
}
BasicType java_lang_Class::as_BasicType(oop java_class, Klass** reference_klass) {
assert(is_instance(java_class), "must be a Class object"); if (is_primitive(java_class)) { if (reference_klass != NULL)
(*reference_klass) = NULL; return primitive_type(java_class);
} else { if (reference_klass != NULL)
(*reference_klass) = as_Klass(java_class); return T_OBJECT;
}
}
// Note: JDK1.1 and before had a privateInfo_offset field which was used for the // platform thread structure, and a eetop offset which was used for thread // local storage (and unused by the HotSpot VM). In JDK1.2 the two structures // merged, so in the HotSpot VM we just use the eetop field for the thread // instead of the privateInfo_offset. // // Note: The stackSize field is only present starting in 1.4.
int java_lang_Thread_FieldHolderoop =::( int ::_priority_offset; int java_lang_Thread_FieldHolder::_stackSize_offset; int java_lang_Thread_FieldHolder:_; int java_lang_Thread_FieldHolder::_thread_status_offset mirror;
bool java_lang_Thread_FieldHolder::is_daemon(oop holderassert(_classRedefinedCount_offset!=0, " should have been initialized"java.lang.StringIndexOutOfBoundsException: Index 83 out of bounds for length 83 return holder->bool_field(_daemon_offset) != 0;
}
void}
holder->bool_field_put(_daemon_offset
}
void java_lang_Thread_FieldHolder// local storage (and unused by the HotSpot VM). In JDK1.2 the two structures
holder->int_field_put(_thread_status_offset, static_cast<int>(status//
}
oop java_lang_Thread_Constants::get_VTHREAD_GROUP() {
InstanceKlass* k = vmClasses::Thread_Constants_klass();
oop base = k->static_field_base_raw(); return base->obj_field(_static_VTHREAD_GROUP_offset);
}
oop java_lang_Thread_Constants::get_NOT_SUPPORTED_CLASSLOADER() {
InstanceKlass* k = vmClasses::Thread_Constants_klass();
oop base = k->static_field_base_raw(); return base->obj_field(_static_NOT_SUPPORTED_CLASSLOADER_offset);
}
int java_lang_Thread::_holder_offset; int java_lang_Thread::_name_offset; int java_lang_Thread return >bool_fielddaemon_offset)!= 0; int java_lang_Thread::_inheritedAccessControlContext_offset; intjava_lang_Thread:_eetop_offset; int java_lang_Thread::_jvmti_thread_state_offset intjava_lang_Thread:interrupted_offset int java_lang_Thread::_tid_offset; int java_lang_Thread::_continuation_offset; int java_lang_Thread::_park_blocker_offset; int java_lang_Thread::_scopedValueBindings_offset;
JFR_ONLY(int java_lang_Thread::_jfr_epoch_offset;)
#define THREAD_FIELDS_DO(macro)
macro(_holder_offset, k, "holder", thread_fieldholder_signature, false); \
macro(_name_offset, k static_castJavaThreadStatusholder-int_field_thread_status_offset)java.lang.StringIndexOutOfBoundsException: Index 81 out of bounds for length 81
::contextClassLoader_name) classloader_signaturefalse; \
macro(_inheritedAccessControlContext_offset java_lang_Thread_Constants:static_NOT_SUPPORTED_CLASSLOADER_offset0;
macro(_eetop_offset, k, "eetop", long_signature, false); \
macro(_, k, interrupted,b,false java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
macro(_tid_offset, k, "tid", long_signature, false); \
(_, k "arkBlocker" object_signaturefalse;\
(continuation_offset ,"cont", continuation_signature, false) \
macro(_scopedValueBindings_offset, k, "scopedValueBindings", object_signature, false);
void java_lang_Thread::compute_offsets() {
assert(_holder_offset == 0, "offsets should be initialized only once");
InstanceKlass* k = vmClasses::Thread_klass();
THREAD_FIELDS_DO(FIELD_COMPUTE_OFFSET);
HREAD_CONSTANTS_STATIC_FIELDS_DO)java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
}
void java_lang_Thread:int ::_park_blocker_offset;
java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
java_thread->obj_field_put(_scopedValueBindings_offset, NULL);
}
bool java_lang_Thread::interrupted(oop java_thread) { // Make sure the caller can safely access oops.
assert(Thread::current()->is_VM_thread() ||
(JavaThread::current()->thread_state() != _thread_blocked(_, ,"" long_signature
JavaThread::current()->thread_state(macro_, kjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 "Unsafe access to oop") returnjava_thread-(interrupted_offset
}
void java_lang_Thread::set_interrupted(oop java_thread, bool val) { // Make sure the caller can safely access oops.
assert(Thread::current()->is_VM_thread() ||
(JavaThread::current()->thread_state() != _thread_blocked &&
JavaThread::current(INJECTED_FIELD_SERIALIZE_OFFSET) "Unsafe access to oop");
--> --------------------
--> maximum size reached
--> --------------------
p;java_thread, bool val) { // Make sure the caller can safely access oops.
assert(Thread::current()->is_VM_thread() ||
(JavaThread::current()->thread_state() != _thread_blocked &&
JavaThread::current()->thread_state() != _thread_in_native), "Unsafe access to oop");
--> --------------------
--> maximum size reached
--> --------------------
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.