11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.vm.annotation;
27
28 import java.lang.annotation.*;
29
30 /**
31 * A field may be annotated as stable if all of its component variables
32 * changes value at most once.
33 * A field's value counts as its component value.
34 * If the field is typed as an array, then all the non-null components
35 * of the array, of depth up to the rank of the field's array type,
36 * also count as component values.
37 * By extension, any variable (either array or field) which has annotated
38 * as stable is called a stable variable, and its non-null or non-zero
39 * value is called a stable value.
40 * <p>
41 * Since all fields begin with a default value of null for references
42 * (resp., zero for primitives), it follows that this annotation indicates
43 * that the first non-null (resp., non-zero) value stored in the field
44 * will never be changed.
45 * <p>
46 * If the field is not of an array type, there are no array elements,
47 * then the value indicated as stable is simply the value of the field.
48 * If the dynamic type of the field value is an array but the static type
49 * is not, the components of the array are <em>not</em> regarded as stable.
50 * <p>
51 * If the field is an array type, then both the field value and
52 * all the components of the field value (if the field value is non-null)
53 * are indicated to be stable.
54 * If the field type is an array type with rank {@code N > 1},
55 * then each component of the field value (if the field value is non-null),
56 * is regarded as a stable array of rank {@code N-1}.
57 * <p>
58 * Fields which are declared {@code final} may also be annotated as stable.
59 * Since final fields already behave as stable values, such an annotation
60 * conveys no additional information regarding change of the field's value, but
61 * still conveys information regarding change of additional components values if
62 * the type of the field is an array type (as described above).
63 * <p>
64 * The HotSpot VM relies on this annotation to promote a non-null (resp.,
65 * non-zero) component value to a constant, thereby enabling superior
66 * optimizations of code depending on such a value (such as constant folding).
67 * More specifically, the HotSpot VM will process non-null stable fields (final
68 * or otherwise) in a similar manner to static final fields with respect to
69 * promoting the field's value to a constant. Thus, placing aside the
70 * differences for null/non-null values and arrays, a final stable field is
71 * treated as if it is really final from both the Java language and the HotSpot
72 * VM.
73 * <p>
74 * It is (currently) undefined what happens if a field annotated as stable
75 * is given a third value (by explicitly updating a stable field, a component of
76 * a stable array, or a final stable field via reflection or other means).
77 * Since the HotSpot VM promotes a non-null component value to constant, it may
78 * be that the Java memory model would appear to be broken, if such a constant
79 * (the second value of the field) is used as the value of the field even after
80 * the field value has changed (to a third value).
81 *
82 * @implNote
83 * This annotation only takes effect for fields of classes loaded by the boot
84 * loader. Annotations on fields of classes loaded outside of the boot loader
85 * are ignored.
86 */
87 @Target(ElementType.FIELD)
88 @Retention(RetentionPolicy.RUNTIME)
89 public @interface Stable {
90 }
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.vm.annotation;
27
28 import java.lang.annotation.*;
29
30 /**
31 * A field may be annotated as "stable" to indicate that it is a
32 * <em>stable variable</em>, expected to change its value just once.
33 * All Java fields are initialized by the VM with a default value
34 * (null or zero). A properly used stable field will be set
35 * just once to a non-default value, and keep that value forever.
36 * While the field contains its default (null or zero) value,
37 * the VM treats it as an ordinary mutable variable. When a
38 * non-default value is stored into the field, the VM is permitted
39 * to assume that no more significant changes will occur. This in
40 * turn enables the VM to optimize uses of the stable variable, treating
41 * them as constant values. This behavior is a useful building block
42 * for lazy evaluation or memoization of results. In rare and subtle
43 * use cases, stable variables may also assume multiple values over
44 * time, with effects as described below.
45 * <p>
46 * <em>(Warning: the {@code @Stable} annotation is intended for use in the
47 * JDK implemention, and with the HotSpot VM, to support optimization
48 * of classes and algorithms defined by the JDK. It is unavailable
49 * outside the JDK.)</em>
50 *
51 * <h2><a id="lifecycle"></a>Stable Variable Life Cycle</h2>
52 *
53 * For example, suppose a class has two non-final fields of type
54 * {@code int} and {@code String}. Annotating the field declarations
55 * with {@code @Stable} creates a pair of stable variables. The
56 * fields are initialized to zero and the null reference,
57 * respectively, in the usual way, but storing a non-zero integer in
58 * the first field or a non-null reference in the second field will
59 * enable the VM to expect that the stored value is now the permanent
60 * value of the field, going forward. This condition may be used by
61 * the VM compiler to improve code quality more aggressively,
62 * if the VM compiler runs after the stable variable has been
63 * given a permanent value, and chooses to observe that value.
64 * <p>
65 * Since all heap variables begin with a default null value for
66 * references (resp., zero for primitives), there is an ambiguity when
67 * the VM discovers a stable variable holding a null or primitive zero
68 * value. Does the user intend the VM to constant fold that
69 * (uninteresting) value? Or is the user waiting until later to
70 * assign a permanent value to the variable? The VM does not
71 * systematically record stores of a null (resp., zero) to a stable variable,
72 * so there is no way for the VM to decide if a field's current value is
73 * its undisturbed initial value, or has been overwritten with
74 * an intentionally stored null (resp., zero). This is why the
75 * programmer should store non-default values into stable variables,
76 * if the consequent optimization is desired.
77 * <p>
78 * A stable variable may be assigned its permanent value inside a class or
79 * object initializer, but in general (with lazy data structures)
80 * stable variables are assigned much later. Depending on the value
81 * stored and what races are possible, safe publication may require
82 * special handling with a {@code VarHandle} atomic method.
83 * (See below.)
84 * <p>
85 * If an application requires constant folding of a stable variable
86 * whose permanent value may be the default value (null or zero),
87 * the variable can be refactored to add an extra indirection.
88 * This would represent the default value in a non-null "box",
89 * such as {@code Integer.valueOf(0)} or a lambda like
90 * {@code ()->null}. Such a refactoring should always be possible,
91 * since stable variables should (obviously) never be part of public
92 * APIs.
93 *
94 * <h2><a id="arrays"></a>Stable Arrays</h2>
95 *
96 * So far, stable variables are fields, but they can be array
97 * components as well. If a stable field is declared as an array
98 * type with one dimension, both that array as a whole, and its
99 * eventual components, are treated as independent stable variables.
100 * When a reference to an array of length <i>N</i> is stored to the
101 * field, then the array object itself is taken to be a constant, as
102 * with any stable field. But then all <i>N</i> of the array
103 * components are <em>also</em> treated as independent stable
104 * variables. Such a stable array may contain any type, reference or
105 * primitive. Such an array may be also marked {@code final}, and
106 * initialized eagerly in the class or object initializer method.
107 * Whether any (or all) of its components are also initialized eagerly
108 * is up to the application.
109 * <p>
110 * More generally, if a stable field is declared as an array type with
111 * <em>D</em> dimensions, then all the non-null components of the
112 * array, and of any sub-arrays up to a nesting depth less than
113 * <em>D</em>, are treated as stable variables. Thus, a stable field
114 * declared as an array potentially defines a tree (of fixed depth
115 * <em>D</em>) containing many stable variables, with each such stable
116 * variable being independently considered for optimization. In this
117 * way, and depending on program execution, a single {@code Stable}
118 * annotation can potentially create many independent stable
119 * variables. Since the top-level array reference is always stable,
120 * it is in general a bad idea to resize the array, even while keeping
121 * all existing components unchanged. (This could be relaxed in the
122 * future, to allow expansion of stable arrays, if there were a use
123 * case that could deal correctly with races. But it would require
124 * careful treatment by the compiler, to avoid folding the wrong
125 * version of an array. Anyway, there are other options, such as
126 * tree structures, for organizing the expansion of bundles of stable
127 * variables.)
128 * <p>
129 * An array is never intrinsically stable. There is no change made to
130 * an array as it is assigned to a stable variable of array type.
131 * This is true even though after such an assignment, the compiler may
132 * observe that array and treat its components as stable variables.
133 * If the array is aliased to some other variable, uses via that
134 * variable will not be treated as stable. (Such aliasing is not
135 * recommended!) Also, storing an array into a stable variable will
136 * not make that array's components into stable variables, unless the
137 * variable into which it is stored is statically typed as an array,
138 * in the declaration of the stable field which refers to that array,
139 * directly or indirectly.
140 *
141 * <h2><a id="examples"></a>Examples of Stable Variables</h2>
142 *
143 * In the following example, the only constant-foldable string stored
144 * in any stable variable is the string {@code "S"}. All subarrays are
145 * constant.
146 *
147 * <pre>{@code
148 * @Stable String FIELD = null; // no foldable value yet
149 * @Stable int IDNUM = 0; // no foldable value yet
150 * @Stable boolean INITIALIZED = false; // no foldable value yet
151 * @Stable Object[] ARRAY = {
152 * "S", // string "S" is foldable
153 * new String[] { "X", "Y" }, // array is foldable, not elements
154 * null // null is not foldable
155 * };
156 * @Stable Object[][] MATRIX = {
157 * { "S", "S" }, // constant value
158 * { new String[] { "X", "Y" } }, // array is foldable, not elements
159 * { null, "S" }, // array is foldable, but not the null
160 * null // could be a foldable subarray later
161 * };
162 * }</pre>
163 *
164 * When the following method is called, some of the above stable
165 * variables will gain their permanent value, a constant-foldable
166 * string "S", or a non-default primitive value.
167 *
168 * <pre>{@code
169 * void publishSomeStables() {
170 * // store some more foldable "S" values:
171 * FIELD = "S";
172 * ARRAY[2] = "S";
173 * MATRIX[2][0] = "S";
174 * MATRIX[3] = new Object[] { "S", "S", null };
175 * // and store some foldable primitives:
176 * IDNUM = 42;
177 * INITIALIZED = true;
178 * VarHandle.releaseFence(); //optional, see below
179 * }
180 * }</pre>
181 *
182 * <p>
183 * Note that a stable boolean variable (i.e., a stable
184 * field like {@code INITIALIZED}, or a stable boolean
185 * array element) can be constant-folded,
186 * but only after it is set to {@code true}. Even this simple
187 * optimization is sometimes useful for responding to a permanent
188 * one-shot state change, in such a way that the compiler can remove
189 * dead code associated with the initial state. As with any stable
190 * variable, it is in general a bad idea to reset such a variable to
191 * its default (i.e., {@code false}), since compiled code might have
192 * captured the {@code true} value as a constant, and as long as that
193 * compiled code is in use, the reset value will go undetected.
194 *
195 * <h2><a id="final"></a>Final Variables, Stable Variables, and Memory Effects</h2>
196 *
197 * Fields which are declared {@code final} may also be annotated as stable.
198 * Since final fields already behave as stable variables, such an annotation
199 * conveys no additional information regarding change of the field's value, but
200 * it conveys information regarding changes to additional component variables if
201 * the type of the field is an array type (as described above).
202 * <p>
203 * In order to assist refactoring between {@code final} and
204 * {@code @Stable} field declarations, the Java Memory Model
205 * <em>freeze</em> operation is applied to both kinds of fields, when
206 * the assignment occurs in a class or object initializer (i.e.,
207 * static initialization code in {@code <clinit>} or constructor code
208 * in {@code <init>}). The freezing of a final or stable field is
209 * (currently) triggered only when an actual assignment occurs, directly
210 * from the initializer method ({@code <clinit>} or {@code <init>}).
211 * It is implemented in HotSpot by an appropriate memory barrier
212 * instruction at the return point of the initializer method. In this
213 * way, any non-null (or non-zero) value stored to a stable variable
214 * (either field or array component) will appear without races to any
215 * user of the class or object that has been initialized.
216 * <p>
217 * (Note: The barrier action of a class initializer is implicit in the
218 * unlocking operation specified in JVMS 5.5, Step 10. The barrier
219 * action of an instance initializer is specified as a "freeze action"
220 * in JLS 17.5.1. These disparate barrier actions have parallel
221 * effects on static and non-static final and stable variables.)
222 * <p>
223 * There is no such JMM freeze operation applied to stable field stores in
224 * any other context. This implies that a constructor may choose to
225 * initialize a stable variable, rather than "leaving it for later".
226 * Such an initial value will be safely published, as if the field were
227 * {@code final}. The stored value may (or may not) contain
228 * additional stable variables, not yet initialized. Note that if a
229 * stable variable is written outside of the code of a constructor (or
230 * class initializer), then data races are possible, just the same as
231 * if there were no {@code @Stable} annotation, and the field were a
232 * regular mutable field. In fact, the usual case for lazily
233 * evaluated data structures is to assign to stable variables much
234 * later than the enclosing data structure is created. This means
235 * that racing reads and writes might observe nulls (or primitive
236 * zeroes) as well as non-default values.
237 *
238 * <h2><a id="usage"></a>Proper Handling of Stable Variables</h2>
239 *
240 * A stable variable can appear to be in either of two states,
241 * either uninitialized, or else set to a permanent, foldable value.
242 * Therefore, most code which reads stable variables should not assume
243 * that the value has been set, and should dynamically test for a null
244 * (or zero) value. Code which cannot prove a previous initialization
245 * must perform a null (or zero) test on a value loaded
246 * from a stable variable. Code which omits the null (or zero) test should be
247 * documented as to why the initialization order is reliable. In
248 * general, some sort of critical section for initialization should be
249 * documented, as provably preceding all uses of the (unchecked)
250 * stable variable, or else reasons should be given why races are
251 * benign, or some other proof given that races are either excluded or
252 * benign. See below for further discussion.
253 * <p>
254 * After constant folding, the compiler can make use of many aspects of
255 * the object: its dynamic type, its length (if it is an array), and
256 * the values of its fields (if they are themselves constants, either
257 * final or stable). It is in general a bad idea to reset such
258 * variables to any other value, since compiled code might have folded
259 * an earlier stored value, and will never detect the reset value.
260 * <p>
261 * The HotSpot interpreter is not fully aware of stable annotations,
262 * and treats annotated fields (and any affected arrays) as regular
263 * mutable variables. Thus, a field annotated as {@code @Stable} may
264 * be given a series of values, by explicit assignment, by reflection,
265 * or by some other means. If the HotSpot compiler constant-folds a
266 * stable variable, then in some contexts (execution of fully
267 * optimized code) the variable will appear to have one "historical"
268 * value, observed, captured, and used within the compiled code to the
269 * exclusion of any other possible values. Meanwhile, in other less
270 * optimized contexts, the stable variable will appear to have a more
271 * recent value. Race conditions, if allowed, will make this even
272 * more complex, since with races there is no definable "most recent"
273 * value across all threads. The compiler can observe any racing
274 * value, as it runs concurrently to the application, in its own
275 * thread.
276 * <p>
277 * It is no good to try to "reset" a stable variable by storing its
278 * default again, because there is (currently) no way to find and
279 * deoptimize any and all affected compiled code. If you need the
280 * bookkeeping, try {@code SwitchPoint} or {@code MutableCallSite},
281 * which both are able to reset compiled code that has captured an
282 * intermediate state.
283 * <p>
284 * Note also each compilation task makes its own decisions about
285 * whether to observe stable variable values, and how aggressively to
286 * constant-fold them. And a method that uses a stable variable might
287 * be inlined by many different compilation tasks. The net result of
288 * all this is that, if stable variables are multiply assigned, the
289 * program execution may observe any "historical" value (if it was
290 * captured by some particular compilation task), as well as a "most
291 * recent" value observed by the interpreter or less-optimized code.
292 * <p>
293 * For all these reasons, a user who bends the rules for a stable
294 * variable, by assigning several values to it, must state the
295 * intended purposes carefully in warning documentation on the
296 * relevant stable field declaration. That user's code must function
297 * correctly when observing any or all of the assigned values, at any
298 * time. Alternatively, field assignments must be constrained
299 * appropriately so that unwanted values are not observable by
300 * compiled code.
301 * <p>
302 * Any class which uses this annotation is responsible for
303 * constraining assignments in such a way as not to violate API
304 * contracts of the class. (If the chosen technique is unusual in
305 * some way, it should be documented in a comment on the field.) Such
306 * constraints can be arranged in a variety of ways:
307 * <ul><li> using the {@code VarHandle} API to perform an explicit
308 * atomic operation such as {@code compareAndExchange},
309 * {@code setRelease}, {@code releaseFence}, or the like.
310 * </li><li> using regular variable access under explicit sychronization
311 * </li><li> using some other kind of critical section to avoid races
312 * which could affect compiled code
313 * </li><li> allowing multiple assignments under benign races, but
314 * only of some separately uniquified value
315 * </li><li> allowing multiple assignments under benign races, but
316 * only of semantically equivalent values, perhaps permitting
317 * occasional duplication of cached values
318 * </li><li> concealing the effects of multiple assignments in some
319 * other API-dependent way
320 * </li><li> providing some other internal proof of correctness, while
321 * accounting for all possible racing API accesses
322 * </li><li> making some appropriate disclaimer in the API about
323 * undefined behavior
324 * </li></ul>
325 * <p>
326 * There may be special times when constant folding of stable
327 * variables is disabled. Such times would amount to a critical
328 * section locking out the compiler from reading stable variables.
329 * During such a critical section, an uninitialized stable variable
330 * can be changed in any way, just like a regular mutable variable
331 * (field or array component). It can even be reset to its default.
332 * Specifically, this may happen during certain AOT operations. If a
333 * stable variable can be updated multiple times during such a
334 * critical section, that fact must be clearly stated as a comment on
335 * the field declaration. (In the future, there may be explicit
336 * AOT-related annotations to convey this use case.) If there is no
337 * such warning, maintainers can safely disregard the possibility of
338 * an AOT critical section, since the author of the stable variable is
339 * relying on one of the other techniques listed above.
340 * <p>
341 * It is possible to imagine markings for foldable methods or fields,
342 * which can constant-fold a wider variety of states and values. This
343 * annotation does not readily extend to such things, for the simple
344 * reason that extra VM bookkeeping would be required to record a
345 * wider variety of candidate states for constant folding. Such
346 * higher-level mechanisms may be created in the future. The present
347 * low-level annotation is designed as a potential building block to
348 * manage their bookkeeping.
349 *
350 * @implNote
351 * This annotation only takes effect for fields of classes loaded by the boot
352 * loader. Annotations on fields of classes loaded outside of the boot loader
353 * are ignored.
354 */
355 @Target(ElementType.FIELD)
356 @Retention(RetentionPolicy.RUNTIME)
357 public @interface Stable {
358 }
|