annotate src/share/vm/ci/ciInstanceKlass.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 55fb97c4c58d
children d8041d695d19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
17467
55fb97c4c58d 8029233: Update copyright year to match last edit in jdk8 hotspot repository for 2013
mikael
parents: 13021
diff changeset
2 * Copyright (c) 1999, 2013, 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;
13021
4d3575d37a07 8026735: Stream tests throw java.lang.IncompatibleClassChangeError
iveresov
parents: 12875
diff changeset
55 bool _has_default_methods;
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
56
0
a61af66fc99e Initial load
duke
parents:
diff changeset
57 ciFlags _flags;
a61af66fc99e Initial load
duke
parents:
diff changeset
58 jint _nonstatic_field_size;
44
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
59 jint _nonstatic_oop_map_size;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
60
a61af66fc99e Initial load
duke
parents:
diff changeset
61 // Lazy fields get filled in only upon request.
a61af66fc99e Initial load
duke
parents:
diff changeset
62 ciInstanceKlass* _super;
a61af66fc99e Initial load
duke
parents:
diff changeset
63 ciInstance* _java_mirror;
a61af66fc99e Initial load
duke
parents:
diff changeset
64
a61af66fc99e Initial load
duke
parents:
diff changeset
65 ciConstantPoolCache* _field_cache; // cached map index->field
a61af66fc99e Initial load
duke
parents:
diff changeset
66 GrowableArray<ciField*>* _nonstatic_fields;
a61af66fc99e Initial load
duke
parents:
diff changeset
67
5998
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
68 // 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
69 // NULL: no implementor.
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
70 // 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
71 // 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
72 ciInstanceKlass* _implementor;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
73
44
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
74 GrowableArray<ciField*>* _non_static_fields;
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
75
0
a61af66fc99e Initial load
duke
parents:
diff changeset
76 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
77 ciInstanceKlass(KlassHandle h_k);
a61af66fc99e Initial load
duke
parents:
diff changeset
78 ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
a61af66fc99e Initial load
duke
parents:
diff changeset
79
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
80 InstanceKlass* get_instanceKlass() const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
81 return (InstanceKlass*)get_Klass();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
82 }
a61af66fc99e Initial load
duke
parents:
diff changeset
83
a61af66fc99e Initial load
duke
parents:
diff changeset
84 oop loader();
a61af66fc99e Initial load
duke
parents:
diff changeset
85 jobject loader_handle();
a61af66fc99e Initial load
duke
parents:
diff changeset
86
a61af66fc99e Initial load
duke
parents:
diff changeset
87 oop protection_domain();
a61af66fc99e Initial load
duke
parents:
diff changeset
88 jobject protection_domain_handle();
a61af66fc99e Initial load
duke
parents:
diff changeset
89
a61af66fc99e Initial load
duke
parents:
diff changeset
90 const char* type_string() { return "ciInstanceKlass"; }
a61af66fc99e Initial load
duke
parents:
diff changeset
91
1138
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
92 bool is_in_package_impl(const char* packagename, int len);
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
93
0
a61af66fc99e Initial load
duke
parents:
diff changeset
94 void print_impl(outputStream* st);
a61af66fc99e Initial load
duke
parents:
diff changeset
95
a61af66fc99e Initial load
duke
parents:
diff changeset
96 ciConstantPoolCache* field_cache();
a61af66fc99e Initial load
duke
parents:
diff changeset
97
a61af66fc99e Initial load
duke
parents:
diff changeset
98 bool is_shared() { return _is_shared; }
a61af66fc99e Initial load
duke
parents:
diff changeset
99
1645
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
100 void compute_shared_init_state();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
101 bool compute_shared_has_subklass();
a61af66fc99e Initial load
duke
parents:
diff changeset
102 int compute_nonstatic_fields();
a61af66fc99e Initial load
duke
parents:
diff changeset
103 GrowableArray<ciField*>* compute_nonstatic_fields_impl(GrowableArray<ciField*>* super_fields);
a61af66fc99e Initial load
duke
parents:
diff changeset
104
1645
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
105 // Update the init_state for shared klasses
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
106 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
107 if (_is_shared && _init_state != expected) {
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
108 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
109 }
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
110 }
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
111
0
a61af66fc99e Initial load
duke
parents:
diff changeset
112 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
113 // Has this klass been initialized?
a61af66fc99e Initial load
duke
parents:
diff changeset
114 bool is_initialized() {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
115 update_if_shared(InstanceKlass::fully_initialized);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
116 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
117 }
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
118 // Is this klass being initialized?
3941674cc7fa 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 1552
diff changeset
119 bool is_being_initialized() {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
120 update_if_shared(InstanceKlass::being_initialized);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
121 return _init_state == InstanceKlass::being_initialized;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
122 }
a61af66fc99e Initial load
duke
parents:
diff changeset
123 // Has this klass been linked?
a61af66fc99e Initial load
duke
parents:
diff changeset
124 bool is_linked() {
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
125 update_if_shared(InstanceKlass::linked);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
126 return _init_state >= InstanceKlass::linked;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
127 }
a61af66fc99e Initial load
duke
parents:
diff changeset
128
a61af66fc99e Initial load
duke
parents:
diff changeset
129 // General klass information.
a61af66fc99e Initial load
duke
parents:
diff changeset
130 ciFlags flags() {
a61af66fc99e Initial load
duke
parents:
diff changeset
131 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
132 return _flags;
a61af66fc99e Initial load
duke
parents:
diff changeset
133 }
a61af66fc99e Initial load
duke
parents:
diff changeset
134 bool has_finalizer() {
a61af66fc99e Initial load
duke
parents:
diff changeset
135 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
136 return _has_finalizer; }
a61af66fc99e Initial load
duke
parents:
diff changeset
137 bool has_subklass() {
a61af66fc99e Initial load
duke
parents:
diff changeset
138 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
139 if (_is_shared && !_has_subklass) {
a61af66fc99e Initial load
duke
parents:
diff changeset
140 if (flags().is_final()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
141 return false;
a61af66fc99e Initial load
duke
parents:
diff changeset
142 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
143 return compute_shared_has_subklass();
a61af66fc99e Initial load
duke
parents:
diff changeset
144 }
a61af66fc99e Initial load
duke
parents:
diff changeset
145 }
a61af66fc99e Initial load
duke
parents:
diff changeset
146 return _has_subklass;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 }
a61af66fc99e Initial load
duke
parents:
diff changeset
148 jint size_helper() {
a61af66fc99e Initial load
duke
parents:
diff changeset
149 return (Klass::layout_helper_size_in_bytes(layout_helper())
a61af66fc99e Initial load
duke
parents:
diff changeset
150 >> LogHeapWordSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
151 }
a61af66fc99e Initial load
duke
parents:
diff changeset
152 jint nonstatic_field_size() {
a61af66fc99e Initial load
duke
parents:
diff changeset
153 assert(is_loaded(), "must be loaded");
a61af66fc99e Initial load
duke
parents:
diff changeset
154 return _nonstatic_field_size; }
113
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
155 jint has_nonstatic_fields() {
ba764ed4b6f2 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 44
diff changeset
156 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
157 return _has_nonstatic_fields; }
44
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
158 jint nonstatic_oop_map_size() {
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
159 assert(is_loaded(), "must be loaded");
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
160 return _nonstatic_oop_map_size; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
161 ciInstanceKlass* super();
5998
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
162 jint nof_implementors() {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
163 ciInstanceKlass* impl;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
164 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
165 impl = implementor();
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
166 if (impl == NULL) {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
167 return 0;
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
168 } else if (impl != this) {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
169 return 1;
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
170 } else {
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
171 return 2;
49036505ab5f 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 1972
diff changeset
172 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
173 }
a61af66fc99e Initial load
duke
parents:
diff changeset
174
13021
4d3575d37a07 8026735: Stream tests throw java.lang.IncompatibleClassChangeError
iveresov
parents: 12875
diff changeset
175 bool has_default_methods() {
4d3575d37a07 8026735: Stream tests throw java.lang.IncompatibleClassChangeError
iveresov
parents: 12875
diff changeset
176 assert(is_loaded(), "must be loaded");
4d3575d37a07 8026735: Stream tests throw java.lang.IncompatibleClassChangeError
iveresov
parents: 12875
diff changeset
177 return _has_default_methods;
4d3575d37a07 8026735: Stream tests throw java.lang.IncompatibleClassChangeError
iveresov
parents: 12875
diff changeset
178 }
4d3575d37a07 8026735: Stream tests throw java.lang.IncompatibleClassChangeError
iveresov
parents: 12875
diff changeset
179
0
a61af66fc99e Initial load
duke
parents:
diff changeset
180 ciInstanceKlass* get_canonical_holder(int offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
181 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
182 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
183
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
184 GrowableArray<ciField*>* non_static_fields();
52fed2ec0afb 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 0
diff changeset
185
0
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // total number of nonstatic fields (including inherited):
a61af66fc99e Initial load
duke
parents:
diff changeset
187 int nof_nonstatic_fields() {
a61af66fc99e Initial load
duke
parents:
diff changeset
188 if (_nonstatic_fields == NULL)
a61af66fc99e Initial load
duke
parents:
diff changeset
189 return compute_nonstatic_fields();
a61af66fc99e Initial load
duke
parents:
diff changeset
190 else
a61af66fc99e Initial load
duke
parents:
diff changeset
191 return _nonstatic_fields->length();
a61af66fc99e Initial load
duke
parents:
diff changeset
192 }
a61af66fc99e Initial load
duke
parents:
diff changeset
193 // nth nonstatic field (presented by ascending address)
a61af66fc99e Initial load
duke
parents:
diff changeset
194 ciField* nonstatic_field_at(int i) {
a61af66fc99e Initial load
duke
parents:
diff changeset
195 assert(_nonstatic_fields != NULL, "");
a61af66fc99e Initial load
duke
parents:
diff changeset
196 return _nonstatic_fields->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
197 }
a61af66fc99e Initial load
duke
parents:
diff changeset
198
a61af66fc99e Initial load
duke
parents:
diff changeset
199 ciInstanceKlass* unique_concrete_subklass();
a61af66fc99e Initial load
duke
parents:
diff changeset
200 bool has_finalizable_subclass();
a61af66fc99e Initial load
duke
parents:
diff changeset
201
a61af66fc99e Initial load
duke
parents:
diff changeset
202 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
203 return instanceOopDesc::contains_field_offset(offset, nonstatic_field_size());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
204 }
a61af66fc99e Initial load
duke
parents:
diff changeset
205
a61af66fc99e Initial load
duke
parents:
diff changeset
206 // Get the instance of java.lang.Class corresponding to
a61af66fc99e Initial load
duke
parents:
diff changeset
207 // this klass. This instance is used for locking of
a61af66fc99e Initial load
duke
parents:
diff changeset
208 // synchronized static methods of this klass.
a61af66fc99e Initial load
duke
parents:
diff changeset
209 ciInstance* java_mirror();
a61af66fc99e Initial load
duke
parents:
diff changeset
210
a61af66fc99e Initial load
duke
parents:
diff changeset
211 // Java access flags
a61af66fc99e Initial load
duke
parents:
diff changeset
212 bool is_public () { return flags().is_public(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
213 bool is_final () { return flags().is_final(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
214 bool is_super () { return flags().is_super(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
215 bool is_interface () { return flags().is_interface(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
216 bool is_abstract () { return flags().is_abstract(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
217
a61af66fc99e Initial load
duke
parents:
diff changeset
218 ciMethod* find_method(ciSymbol* name, ciSymbol* signature);
a61af66fc99e Initial load
duke
parents:
diff changeset
219 // Note: To find a method from name and type strings, use ciSymbol::make,
a61af66fc99e Initial load
duke
parents:
diff changeset
220 // but consider adding to vmSymbols.hpp instead.
a61af66fc99e Initial load
duke
parents:
diff changeset
221
a61af66fc99e Initial load
duke
parents:
diff changeset
222 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
223 ciInstanceKlass* implementor();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
224
a61af66fc99e Initial load
duke
parents:
diff changeset
225 // Is the defining class loader of this class the default loader?
10278
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 6972
diff changeset
226 bool uses_default_loader() const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
227
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
228 bool is_java_lang_Object() const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
229
10278
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 6972
diff changeset
230 BasicType box_klass_type() const;
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 6972
diff changeset
231 bool is_box_klass() const;
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 6972
diff changeset
232 bool is_boxed_value_offset(int offset) const;
6f3fd5150b67 6934604: enable parts of EliminateAutoBox by default
kvn
parents: 6972
diff changeset
233
1138
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
234 // Is this klass in the given package?
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
235 bool is_in_package(const char* packagename) {
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
236 return is_in_package(packagename, (int) strlen(packagename));
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
237 }
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
238 bool is_in_package(const char* packagename, int len);
dd57230ba8fe 6893268: additional dynamic language related optimizations in C2
twisti
parents: 1080
diff changeset
239
0
a61af66fc99e Initial load
duke
parents:
diff changeset
240 // What kind of ciObject is this?
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
241 bool is_instance_klass() const { return true; }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 5998
diff changeset
242 bool is_java_klass() const { return true; }
6972
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6725
diff changeset
243
12875
d13d7aba8c12 8023657: New type profiling points: arguments to call
roland
parents: 10278
diff changeset
244 virtual ciKlass* exact_klass() {
d13d7aba8c12 8023657: New type profiling points: arguments to call
roland
parents: 10278
diff changeset
245 if (is_loaded() && is_final() && !is_interface()) {
d13d7aba8c12 8023657: New type profiling points: arguments to call
roland
parents: 10278
diff changeset
246 return this;
d13d7aba8c12 8023657: New type profiling points: arguments to call
roland
parents: 10278
diff changeset
247 }
d13d7aba8c12 8023657: New type profiling points: arguments to call
roland
parents: 10278
diff changeset
248 return NULL;
d13d7aba8c12 8023657: New type profiling points: arguments to call
roland
parents: 10278
diff changeset
249 }
d13d7aba8c12 8023657: New type profiling points: arguments to call
roland
parents: 10278
diff changeset
250
6972
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6725
diff changeset
251 // Dump the current state of this klass for compilation replay.
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6725
diff changeset
252 virtual void dump_replay_data(outputStream* out);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
253 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
254
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1645
diff changeset
255 #endif // SHARE_VM_CI_CIINSTANCEKLASS_HPP