Mercurial > hg > truffle
annotate src/share/vm/runtime/fieldDescriptor.cpp @ 6862:8a5ea0a9ccc4
7127708: G1: change task num types from int to uint in concurrent mark
Summary: Change the type of various task num fields, parameters etc to unsigned and rename them to be more consistent with the other collectors. Code changes were also reviewed by Vitaly Davidovich.
Reviewed-by: johnc
Contributed-by: Kaushik Srenevasan <kaushik@twitter.com>
author | johnc |
---|---|
date | Sat, 06 Oct 2012 01:17:44 -0700 |
parents | da91efe96a93 |
children | 18fb7da42534 |
rev | line source |
---|---|
0 | 1 /* |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
665
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
665
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
665
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #include "precompiled.hpp" |
26 #include "classfile/systemDictionary.hpp" | |
27 #include "classfile/vmSymbols.hpp" | |
28 #include "memory/resourceArea.hpp" | |
29 #include "memory/universe.inline.hpp" | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
30 #include "oops/annotations.hpp" |
1972 | 31 #include "oops/instanceKlass.hpp" |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
32 #include "oops/fieldStreams.hpp" |
1972 | 33 #include "runtime/fieldDescriptor.hpp" |
34 #include "runtime/handles.inline.hpp" | |
35 #include "runtime/signature.hpp" | |
0 | 36 |
37 | |
38 oop fieldDescriptor::loader() const { | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
39 return InstanceKlass::cast(_cp->pool_holder())->class_loader(); |
0 | 40 } |
41 | |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
42 Symbol* fieldDescriptor::generic_signature() const { |
6176
634b8615a6ba
7177409: Perf regression in JVM_GetClassDeclaredFields after generic signature changes.
jiangli
parents:
6100
diff
changeset
|
43 if (!has_generic_signature()) { |
634b8615a6ba
7177409: Perf regression in JVM_GetClassDeclaredFields after generic signature changes.
jiangli
parents:
6100
diff
changeset
|
44 return NULL; |
634b8615a6ba
7177409: Perf regression in JVM_GetClassDeclaredFields after generic signature changes.
jiangli
parents:
6100
diff
changeset
|
45 } |
634b8615a6ba
7177409: Perf regression in JVM_GetClassDeclaredFields after generic signature changes.
jiangli
parents:
6100
diff
changeset
|
46 |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
47 int idx = 0; |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
48 InstanceKlass* ik = InstanceKlass::cast(field_holder()); |
6100
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
49 for (AllFieldStream fs(ik); !fs.done(); fs.next()) { |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
50 if (idx == _index) { |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
51 return fs.generic_signature(); |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
52 } else { |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
53 idx ++; |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
54 } |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
55 } |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
56 assert(false, "should never happen"); |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
57 return NULL; |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
58 } |
71afdabfd05b
7168280: Eliminate the generic signature index slot from field array for field without generic signature.
jiangli
parents:
3938
diff
changeset
|
59 |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
60 AnnotationArray* fieldDescriptor::annotations() const { |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
61 InstanceKlass* ik = InstanceKlass::cast(field_holder()); |
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
62 Array<AnnotationArray*>* md = ik->fields_annotations(); |
0 | 63 if (md == NULL) |
64 return NULL; | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
65 return md->at(index()); |
0 | 66 } |
67 | |
68 constantTag fieldDescriptor::initial_value_tag() const { | |
3938 | 69 return constants()->tag_at(initial_value_index()); |
0 | 70 } |
71 | |
72 jint fieldDescriptor::int_initial_value() const { | |
3938 | 73 return constants()->int_at(initial_value_index()); |
0 | 74 } |
75 | |
76 jlong fieldDescriptor::long_initial_value() const { | |
3938 | 77 return constants()->long_at(initial_value_index()); |
0 | 78 } |
79 | |
80 jfloat fieldDescriptor::float_initial_value() const { | |
3938 | 81 return constants()->float_at(initial_value_index()); |
0 | 82 } |
83 | |
84 jdouble fieldDescriptor::double_initial_value() const { | |
3938 | 85 return constants()->double_at(initial_value_index()); |
0 | 86 } |
87 | |
88 oop fieldDescriptor::string_initial_value(TRAPS) const { | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
89 return constants()->uncached_string_at(initial_value_index(), CHECK_0); |
0 | 90 } |
91 | |
6725
da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
6176
diff
changeset
|
92 void fieldDescriptor::initialize(InstanceKlass* ik, int index) { |
0 | 93 _cp = ik->constants(); |
3938 | 94 FieldInfo* f = ik->field(index); |
95 assert(!f->is_internal(), "regular Java fields only"); | |
0 | 96 |
3938 | 97 _access_flags = accessFlags_from(f->access_flags()); |
98 guarantee(f->name_index() != 0 && f->signature_index() != 0, "bad constant pool index for fieldDescriptor"); | |
0 | 99 _index = index; |
100 } | |
101 | |
102 #ifndef PRODUCT | |
103 | |
104 void fieldDescriptor::print_on(outputStream* st) const { | |
3938 | 105 access_flags().print_on(st); |
106 name()->print_value_on(st); | |
0 | 107 st->print(" "); |
3938 | 108 signature()->print_value_on(st); |
0 | 109 st->print(" @%d ", offset()); |
110 if (WizardMode && has_initial_value()) { | |
111 st->print("(initval "); | |
112 constantTag t = initial_value_tag(); | |
113 if (t.is_int()) { | |
114 st->print("int %d)", int_initial_value()); | |
115 } else if (t.is_long()){ | |
116 st->print_jlong(long_initial_value()); | |
117 } else if (t.is_float()){ | |
118 st->print("float %f)", float_initial_value()); | |
119 } else if (t.is_double()){ | |
120 st->print("double %lf)", double_initial_value()); | |
121 } | |
122 } | |
123 } | |
124 | |
125 void fieldDescriptor::print_on_for(outputStream* st, oop obj) { | |
126 print_on(st); | |
127 BasicType ft = field_type(); | |
665
c89f86385056
6814659: separable cleanups and subroutines for 6655638
jrose
parents:
0
diff
changeset
|
128 jint as_int = 0; |
0 | 129 switch (ft) { |
130 case T_BYTE: | |
131 as_int = (jint)obj->byte_field(offset()); | |
132 st->print(" %d", obj->byte_field(offset())); | |
133 break; | |
134 case T_CHAR: | |
665
c89f86385056
6814659: separable cleanups and subroutines for 6655638
jrose
parents:
0
diff
changeset
|
135 as_int = (jint)obj->char_field(offset()); |
0 | 136 { |
137 jchar c = obj->char_field(offset()); | |
138 as_int = c; | |
139 st->print(" %c %d", isprint(c) ? c : ' ', c); | |
140 } | |
141 break; | |
142 case T_DOUBLE: | |
143 st->print(" %lf", obj->double_field(offset())); | |
144 break; | |
145 case T_FLOAT: | |
146 as_int = obj->int_field(offset()); | |
147 st->print(" %f", obj->float_field(offset())); | |
148 break; | |
149 case T_INT: | |
665
c89f86385056
6814659: separable cleanups and subroutines for 6655638
jrose
parents:
0
diff
changeset
|
150 as_int = obj->int_field(offset()); |
0 | 151 st->print(" %d", obj->int_field(offset())); |
152 break; | |
153 case T_LONG: | |
154 st->print(" "); | |
155 st->print_jlong(obj->long_field(offset())); | |
156 break; | |
157 case T_SHORT: | |
158 as_int = obj->short_field(offset()); | |
159 st->print(" %d", obj->short_field(offset())); | |
160 break; | |
161 case T_BOOLEAN: | |
162 as_int = obj->bool_field(offset()); | |
163 st->print(" %s", obj->bool_field(offset()) ? "true" : "false"); | |
164 break; | |
165 case T_ARRAY: | |
166 st->print(" "); | |
665
c89f86385056
6814659: separable cleanups and subroutines for 6655638
jrose
parents:
0
diff
changeset
|
167 NOT_LP64(as_int = obj->int_field(offset())); |
0 | 168 obj->obj_field(offset())->print_value_on(st); |
169 break; | |
170 case T_OBJECT: | |
171 st->print(" "); | |
665
c89f86385056
6814659: separable cleanups and subroutines for 6655638
jrose
parents:
0
diff
changeset
|
172 NOT_LP64(as_int = obj->int_field(offset())); |
0 | 173 obj->obj_field(offset())->print_value_on(st); |
174 break; | |
175 default: | |
176 ShouldNotReachHere(); | |
177 break; | |
178 } | |
179 // Print a hint as to the underlying integer representation. This can be wrong for | |
180 // pointers on an LP64 machine | |
665
c89f86385056
6814659: separable cleanups and subroutines for 6655638
jrose
parents:
0
diff
changeset
|
181 if (ft == T_LONG || ft == T_DOUBLE LP64_ONLY(|| !is_java_primitive(ft)) ) { |
0 | 182 st->print(" (%x %x)", obj->int_field(offset()), obj->int_field(offset()+sizeof(jint))); |
665
c89f86385056
6814659: separable cleanups and subroutines for 6655638
jrose
parents:
0
diff
changeset
|
183 } else if (as_int < 0 || as_int > 9) { |
0 | 184 st->print(" (%x)", as_int); |
185 } | |
186 } | |
187 | |
188 #endif /* PRODUCT */ |