annotate src/share/vm/ci/ciInstanceKlass.hpp @ 6972:bd7a7ce2e264

6830717: replay of compilations would help with debugging Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method. Reviewed-by: kvn, twisti, sspitsyn Contributed-by: yumin.qi@oracle.com
author minqi
date Mon, 12 Nov 2012 14:03:53 -0800
parents da91efe96a93
children 2cb439954abf 6f3fd5150b67
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
5998
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
2 * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1138
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1138
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: 1138
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
25 #ifndef SHARE_VM_CI_CIINSTANCEKLASS_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
26 #define SHARE_VM_CI_CIINSTANCEKLASS_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
28 #include "ci/ciConstantPoolCache.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
29 #include "ci/ciFlags.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
30 #include "ci/ciKlass.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
31 #include "ci/ciSymbol.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
32
0
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // ciInstanceKlass
a61af66fc99e Initial load
duke
parents:
diff changeset
34 //
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
35 // This class represents a Klass* in the HotSpot virtual machine
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
36 // whose Klass part is an InstanceKlass. It may or may not
0
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // be loaded.
a61af66fc99e Initial load
duke
parents:
diff changeset
38 class ciInstanceKlass : public ciKlass {
a61af66fc99e Initial load
duke
parents:
diff changeset
39 CI_PACKAGE_ACCESS
1138
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
40 friend class ciBytecodeStream;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
41 friend class ciEnv;
1138
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
42 friend class ciExceptionHandler;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
43 friend class ciMethod;
a61af66fc99e Initial load
duke
parents:
diff changeset
44 friend class ciField;
a61af66fc99e Initial load
duke
parents:
diff changeset
45
a61af66fc99e Initial load
duke
parents:
diff changeset
46 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
47 jobject _loader;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 jobject _protection_domain;
a61af66fc99e Initial load
duke
parents:
diff changeset
49
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
50 InstanceKlass::ClassState _init_state; // state of class
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
51 bool _is_shared;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
52 bool _has_finalizer;
a61af66fc99e Initial load
duke
parents:
diff changeset
53 bool _has_subklass;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
54 bool _has_nonstatic_fields;
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
55
0
a61af66fc99e Initial load
duke
parents:
diff changeset
56 ciFlags _flags;
a61af66fc99e Initial load
duke
parents:
diff changeset
57 jint _nonstatic_field_size;
44
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
58 jint _nonstatic_oop_map_size;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
59
a61af66fc99e Initial load
duke
parents:
diff changeset
60 // Lazy fields get filled in only upon request.
a61af66fc99e Initial load
duke
parents:
diff changeset
61 ciInstanceKlass* _super;
a61af66fc99e Initial load
duke
parents:
diff changeset
62 ciInstance* _java_mirror;
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 ciConstantPoolCache* _field_cache; // cached map index->field
a61af66fc99e Initial load
duke
parents:
diff changeset
65 GrowableArray<ciField*>* _nonstatic_fields;
a61af66fc99e Initial load
duke
parents:
diff changeset
66
5998
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
67 // The possible values of the _implementor fall into following three cases:
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
68 // NULL: no implementor.
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
69 // A ciInstanceKlass that's not itself: one implementor.
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
70 // Itsef: more than one implementors.
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
71 ciInstanceKlass* _implementor;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
72
44
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
73 GrowableArray<ciField*>* _non_static_fields;
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
74
0
a61af66fc99e Initial load
duke
parents:
diff changeset
75 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
76 ciInstanceKlass(KlassHandle h_k);
a61af66fc99e Initial load
duke
parents:
diff changeset
77 ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
a61af66fc99e Initial load
duke
parents:
diff changeset
78
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
79 InstanceKlass* get_instanceKlass() const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
80 return (InstanceKlass*)get_Klass();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
81 }
a61af66fc99e Initial load
duke
parents:
diff changeset
82
a61af66fc99e Initial load
duke
parents:
diff changeset
83 oop loader();
a61af66fc99e Initial load
duke
parents:
diff changeset
84 jobject loader_handle();
a61af66fc99e Initial load
duke
parents:
diff changeset
85
a61af66fc99e Initial load
duke
parents:
diff changeset
86 oop protection_domain();
a61af66fc99e Initial load
duke
parents:
diff changeset
87 jobject protection_domain_handle();
a61af66fc99e Initial load
duke
parents:
diff changeset
88
a61af66fc99e Initial load
duke
parents:
diff changeset
89 const char* type_string() { return "ciInstanceKlass"; }
a61af66fc99e Initial load
duke
parents:
diff changeset
90
1138
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
91 bool is_in_package_impl(const char* packagename, int len);
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
92
0
a61af66fc99e Initial load
duke
parents:
diff changeset
93 void print_impl(outputStream* st);
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 ciConstantPoolCache* field_cache();
a61af66fc99e Initial load
duke
parents:
diff changeset
96
a61af66fc99e Initial load
duke
parents:
diff changeset
97 bool is_shared() { return _is_shared; }
a61af66fc99e Initial load
duke
parents:
diff changeset
98
1645
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
99 void compute_shared_init_state();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
100 bool compute_shared_has_subklass();
a61af66fc99e Initial load
duke
parents:
diff changeset
101 int compute_nonstatic_fields();
a61af66fc99e Initial load
duke
parents:
diff changeset
102 GrowableArray<ciField*>* compute_nonstatic_fields_impl(GrowableArray<ciField*>* super_fields);
a61af66fc99e Initial load
duke
parents:
diff changeset
103
1645
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
104 // Update the init_state for shared klasses
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
105 void update_if_shared(InstanceKlass::ClassState expected) {
1645
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
106 if (_is_shared && _init_state != expected) {
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
107 if (is_loaded()) compute_shared_init_state();
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
108 }
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
109 }
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
110
0
a61af66fc99e Initial load
duke
parents:
diff changeset
111 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
112 // Has this klass been initialized?
a61af66fc99e Initial load
duke
parents:
diff changeset
113 bool is_initialized() {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
114 update_if_shared(InstanceKlass::fully_initialized);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
115 return _init_state == InstanceKlass::fully_initialized;
1645
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
116 }
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
117 // Is this klass being initialized?
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
118 bool is_being_initialized() {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
119 update_if_shared(InstanceKlass::being_initialized);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
120 return _init_state == InstanceKlass::being_initialized;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
121 }
a61af66fc99e Initial load
duke
parents:
diff changeset
122 // Has this klass been linked?
a61af66fc99e Initial load
duke
parents:
diff changeset
123 bool is_linked() {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
124 update_if_shared(InstanceKlass::linked);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
125 return _init_state >= InstanceKlass::linked;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
126 }
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 // General klass information.
a61af66fc99e Initial load
duke
parents:
diff changeset
129 ciFlags flags() {
a61af66fc99e Initial load
duke
parents:
diff changeset
130 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
131 return _flags;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 }
a61af66fc99e Initial load
duke
parents:
diff changeset
133 bool has_finalizer() {
a61af66fc99e Initial load
duke
parents:
diff changeset
134 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
135 return _has_finalizer; }
a61af66fc99e Initial load
duke
parents:
diff changeset
136 bool has_subklass() {
a61af66fc99e Initial load
duke
parents:
diff changeset
137 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
138 if (_is_shared && !_has_subklass) {
a61af66fc99e Initial load
duke
parents:
diff changeset
139 if (flags().is_final()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
140 return false;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
142 return compute_shared_has_subklass();
a61af66fc99e Initial load
duke
parents:
diff changeset
143 }
a61af66fc99e Initial load
duke
parents:
diff changeset
144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
145 return _has_subklass;
a61af66fc99e Initial load
duke
parents:
diff changeset
146 }
a61af66fc99e Initial load
duke
parents:
diff changeset
147 jint size_helper() {
a61af66fc99e Initial load
duke
parents:
diff changeset
148 return (Klass::layout_helper_size_in_bytes(layout_helper())
a61af66fc99e Initial load
duke
parents:
diff changeset
149 >> LogHeapWordSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
150 }
a61af66fc99e Initial load
duke
parents:
diff changeset
151 jint nonstatic_field_size() {
a61af66fc99e Initial load
duke
parents:
diff changeset
152 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
153 return _nonstatic_field_size; }
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
154 jint has_nonstatic_fields() {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
155 assert(is_loaded(), "must be loaded");
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
156 return _has_nonstatic_fields; }
44
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
157 jint nonstatic_oop_map_size() {
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
158 assert(is_loaded(), "must be loaded");
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
159 return _nonstatic_oop_map_size; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
160 ciInstanceKlass* super();
5998
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
161 jint nof_implementors() {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
162 ciInstanceKlass* impl;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
163 assert(is_loaded(), "must be loaded");
5998
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
164 impl = implementor();
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
165 if (impl == NULL) {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
166 return 0;
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
167 } else if (impl != this) {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
168 return 1;
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
169 } else {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
170 return 2;
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
171 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
172 }
a61af66fc99e Initial load
duke
parents:
diff changeset
173
a61af66fc99e Initial load
duke
parents:
diff changeset
174 ciInstanceKlass* get_canonical_holder(int offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
175 ciField* get_field_by_offset(int field_offset, bool is_static);
1080
7c57aead6d3e 6892658: C2 should optimize some stringbuilder patterns
never
parents: 196
diff changeset
176 ciField* get_field_by_name(ciSymbol* name, ciSymbol* signature, bool is_static);
44
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
177
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
178 GrowableArray<ciField*>* non_static_fields();
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
179
0
a61af66fc99e Initial load
duke
parents:
diff changeset
180 // total number of nonstatic fields (including inherited):
a61af66fc99e Initial load
duke
parents:
diff changeset
181 int nof_nonstatic_fields() {
a61af66fc99e Initial load
duke
parents:
diff changeset
182 if (_nonstatic_fields == NULL)
a61af66fc99e Initial load
duke
parents:
diff changeset
183 return compute_nonstatic_fields();
a61af66fc99e Initial load
duke
parents:
diff changeset
184 else
a61af66fc99e Initial load
duke
parents:
diff changeset
185 return _nonstatic_fields->length();
a61af66fc99e Initial load
duke
parents:
diff changeset
186 }
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // nth nonstatic field (presented by ascending address)
a61af66fc99e Initial load
duke
parents:
diff changeset
188 ciField* nonstatic_field_at(int i) {
a61af66fc99e Initial load
duke
parents:
diff changeset
189 assert(_nonstatic_fields != NULL, "");
a61af66fc99e Initial load
duke
parents:
diff changeset
190 return _nonstatic_fields->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
191 }
a61af66fc99e Initial load
duke
parents:
diff changeset
192
a61af66fc99e Initial load
duke
parents:
diff changeset
193 ciInstanceKlass* unique_concrete_subklass();
a61af66fc99e Initial load
duke
parents:
diff changeset
194 bool has_finalizable_subclass();
a61af66fc99e Initial load
duke
parents:
diff changeset
195
a61af66fc99e Initial load
duke
parents:
diff changeset
196 bool contains_field_offset(int offset) {
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
197 return instanceOopDesc::contains_field_offset(offset, nonstatic_field_size());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
198 }
a61af66fc99e Initial load
duke
parents:
diff changeset
199
a61af66fc99e Initial load
duke
parents:
diff changeset
200 // Get the instance of java.lang.Class corresponding to
a61af66fc99e Initial load
duke
parents:
diff changeset
201 // this klass. This instance is used for locking of
a61af66fc99e Initial load
duke
parents:
diff changeset
202 // synchronized static methods of this klass.
a61af66fc99e Initial load
duke
parents:
diff changeset
203 ciInstance* java_mirror();
a61af66fc99e Initial load
duke
parents:
diff changeset
204
a61af66fc99e Initial load
duke
parents:
diff changeset
205 // Java access flags
a61af66fc99e Initial load
duke
parents:
diff changeset
206 bool is_public () { return flags().is_public(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
207 bool is_final () { return flags().is_final(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
208 bool is_super () { return flags().is_super(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
209 bool is_interface () { return flags().is_interface(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
210 bool is_abstract () { return flags().is_abstract(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
211
a61af66fc99e Initial load
duke
parents:
diff changeset
212 ciMethod* find_method(ciSymbol* name, ciSymbol* signature);
a61af66fc99e Initial load
duke
parents:
diff changeset
213 // Note: To find a method from name and type strings, use ciSymbol::make,
a61af66fc99e Initial load
duke
parents:
diff changeset
214 // but consider adding to vmSymbols.hpp instead.
a61af66fc99e Initial load
duke
parents:
diff changeset
215
a61af66fc99e Initial load
duke
parents:
diff changeset
216 bool is_leaf_type();
5998
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
217 ciInstanceKlass* implementor();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
218
a61af66fc99e Initial load
duke
parents:
diff changeset
219 // Is the defining class loader of this class the default loader?
a61af66fc99e Initial load
duke
parents:
diff changeset
220 bool uses_default_loader();
a61af66fc99e Initial load
duke
parents:
diff changeset
221
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
222 bool is_java_lang_Object() const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
223
1138
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
224 // Is this klass in the given package?
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
225 bool is_in_package(const char* packagename) {
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
226 return is_in_package(packagename, (int) strlen(packagename));
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
227 }
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
228 bool is_in_package(const char* packagename, int len);
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
229
0
a61af66fc99e Initial load
duke
parents:
diff changeset
230 // What kind of ciObject is this?
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
231 bool is_instance_klass() const { return true; }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
232 bool is_java_klass() const { return true; }
6972
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6725
diff changeset
233
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6725
diff changeset
234 // Dump the current state of this klass for compilation replay.
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6725
diff changeset
235 virtual void dump_replay_data(outputStream* out);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
236 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
237
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
238 #endif // SHARE_VM_CI_CIINSTANCEKLASS_HPP