Mercurial > hg > truffle
annotate src/share/vm/ci/ciField.hpp @ 1994:6cd6d394f280
7001033: assert(gch->gc_cause() == GCCause::_scavenge_alot || !gch->incremental_collection_failed())
7002546: regression on SpecJbb2005 on 7b118 comparing to 7b117 on small heaps
Summary: Relaxed assertion checking related to incremental_collection_failed flag to allow for ExplicitGCInvokesConcurrent behaviour where we do not want a failing scavenge to bail to a stop-world collection. Parameterized incremental_collection_will_fail() so we can selectively use, or not use, as appropriate, the statistical prediction at specific use sites. This essentially reverts the scavenge bail-out logic to what it was prior to some recent changes that had inadvertently started using the statistical prediction which can be noisy in the presence of bursty loads. Added some associated verbose non-product debugging messages.
Reviewed-by: johnc, tonyp
author | ysr |
---|---|
date | Tue, 07 Dec 2010 21:55:53 -0800 |
parents | f95d63e2154a |
children | 06f017f7daa7 fdb992d83a87 |
rev | line source |
---|---|
0 | 1 /* |
1972 | 2 * Copyright (c) 1999, 2010, 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:
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 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_CI_CIFIELD_HPP |
26 #define SHARE_VM_CI_CIFIELD_HPP | |
27 | |
28 #include "ci/ciClassList.hpp" | |
29 #include "ci/ciConstant.hpp" | |
30 #include "ci/ciFlags.hpp" | |
31 #include "ci/ciInstance.hpp" | |
32 | |
0 | 33 // ciField |
34 // | |
35 // This class represents the result of a field lookup in the VM. | |
36 // The lookup may not succeed, in which case the information in | |
37 // the ciField will be incomplete. | |
38 class ciField : public ResourceObj { | |
39 CI_PACKAGE_ACCESS | |
40 friend class ciEnv; | |
41 friend class ciInstanceKlass; | |
42 friend class NonStaticFieldFiller; | |
43 | |
44 private: | |
45 ciFlags _flags; | |
46 ciInstanceKlass* _holder; | |
47 ciSymbol* _name; | |
48 ciSymbol* _signature; | |
49 ciType* _type; | |
50 int _offset; | |
51 bool _is_constant; | |
52 ciInstanceKlass* _known_to_link_with; | |
53 ciConstant _constant_value; | |
54 | |
55 // Used for will_link | |
56 int _cp_index; | |
57 | |
58 ciType* compute_type(); | |
59 ciType* compute_type_impl(); | |
60 | |
61 ciField(ciInstanceKlass* klass, int index); | |
62 ciField(fieldDescriptor* fd); | |
63 | |
64 // shared constructor code | |
65 void initialize_from(fieldDescriptor* fd); | |
66 | |
67 // The implementation of the print method. | |
68 void print_impl(outputStream* st); | |
69 | |
70 public: | |
71 ciFlags flags() { return _flags; } | |
72 | |
73 // Of which klass is this field a member? | |
74 // | |
75 // Usage note: the declared holder of a field is the class | |
76 // referenced by name in the bytecodes. The canonical holder | |
77 // is the most general class which holds the field. This | |
78 // method returns the canonical holder. The declared holder | |
79 // can be accessed via a method in ciBytecodeStream. | |
80 // | |
81 // Ex. | |
82 // class A { | |
83 // public int f = 7; | |
84 // } | |
85 // class B extends A { | |
86 // public void test() { | |
87 // System.out.println(f); | |
88 // } | |
89 // } | |
90 // | |
91 // A java compiler is permitted to compile the access to | |
92 // field f as: | |
93 // | |
94 // getfield B.f | |
95 // | |
96 // In that case the declared holder of f would be B and | |
97 // the canonical holder of f would be A. | |
98 ciInstanceKlass* holder() { return _holder; } | |
99 | |
100 // Name of this field? | |
101 ciSymbol* name() { return _name; } | |
102 | |
103 // Signature of this field? | |
104 ciSymbol* signature() { return _signature; } | |
105 | |
106 // Of what type is this field? | |
107 ciType* type() { return (_type == NULL) ? compute_type() : _type; } | |
108 | |
109 // How is this field actually stored in memory? | |
110 BasicType layout_type() { return type2field[(_type == NULL) ? T_OBJECT : _type->basic_type()]; } | |
111 | |
112 // How big is this field in memory? | |
29
d5fc211aea19
6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM
kvn
parents:
0
diff
changeset
|
113 int size_in_bytes() { return type2aelembytes(layout_type()); } |
0 | 114 |
115 // What is the offset of this field? | |
116 int offset() { | |
117 assert(_offset >= 1, "illegal call to offset()"); | |
118 return _offset; | |
119 } | |
120 | |
121 // Same question, explicit units. (Fields are aligned to the byte level.) | |
122 int offset_in_bytes() { | |
123 return offset(); | |
124 } | |
125 | |
126 // Is this field shared? | |
127 bool is_shared() { | |
128 // non-static fields of shared holders are cached | |
129 return _holder->is_shared() && !is_static(); | |
130 } | |
131 | |
132 // Is this field a constant? | |
133 // | |
134 // Clarification: A field is considered constant if: | |
135 // 1. The field is both static and final | |
136 // 2. The canonical holder of the field has undergone | |
137 // static initialization. | |
138 // 3. If the field is an object or array, then the oop | |
139 // in question is allocated in perm space. | |
140 // 4. The field is not one of the special static/final | |
141 // non-constant fields. These are java.lang.System.in | |
142 // and java.lang.System.out. Abomination. | |
143 // | |
144 // Note: the check for case 4 is not yet implemented. | |
145 bool is_constant() { return _is_constant; } | |
146 | |
147 // Get the constant value of this field. | |
148 ciConstant constant_value() { | |
1138
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
149 assert(is_static() && is_constant(), "illegal call to constant_value()"); |
0 | 150 return _constant_value; |
151 } | |
152 | |
1138
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
153 // Get the constant value of non-static final field in the given |
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
154 // object. |
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
155 ciConstant constant_value_of(ciObject* object) { |
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
156 assert(!is_static() && is_constant(), "only if field is non-static constant"); |
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
157 assert(object->is_instance(), "must be instance"); |
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
158 return object->as_instance()->field_value(this); |
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
159 } |
dd57230ba8fe
6893268: additional dynamic language related optimizations in C2
twisti
parents:
196
diff
changeset
|
160 |
0 | 161 // Check for link time errors. Accessing a field from a |
162 // certain class via a certain bytecode may or may not be legal. | |
163 // This call checks to see if an exception may be raised by | |
164 // an access of this field. | |
165 // | |
166 // Usage note: if the same field is accessed multiple times | |
167 // in the same compilation, will_link will need to be checked | |
168 // at each point of access. | |
169 bool will_link(ciInstanceKlass* accessing_klass, | |
170 Bytecodes::Code bc); | |
171 | |
172 // Java access flags | |
173 bool is_public () { return flags().is_public(); } | |
174 bool is_private () { return flags().is_private(); } | |
175 bool is_protected () { return flags().is_protected(); } | |
176 bool is_static () { return flags().is_static(); } | |
177 bool is_final () { return flags().is_final(); } | |
178 bool is_volatile () { return flags().is_volatile(); } | |
179 bool is_transient () { return flags().is_transient(); } | |
180 | |
181 // Debugging output | |
182 void print(); | |
183 void print_name_on(outputStream* st); | |
184 }; | |
1972 | 185 |
186 #endif // SHARE_VM_CI_CIFIELD_HPP |