Thu, 20 Nov 2008 16:56:09 -0800
6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa
1 /*
2 * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
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 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 *
23 */
25 // This file holds all globally used constants & types, class (forward)
26 // declarations and a few frequently used utility functions.
28 //----------------------------------------------------------------------------------------------------
29 // Constants
31 const int LogBytesPerShort = 1;
32 const int LogBytesPerInt = 2;
33 #ifdef _LP64
34 const int LogBytesPerWord = 3;
35 #else
36 const int LogBytesPerWord = 2;
37 #endif
38 const int LogBytesPerLong = 3;
40 const int BytesPerShort = 1 << LogBytesPerShort;
41 const int BytesPerInt = 1 << LogBytesPerInt;
42 const int BytesPerWord = 1 << LogBytesPerWord;
43 const int BytesPerLong = 1 << LogBytesPerLong;
45 const int LogBitsPerByte = 3;
46 const int LogBitsPerShort = LogBitsPerByte + LogBytesPerShort;
47 const int LogBitsPerInt = LogBitsPerByte + LogBytesPerInt;
48 const int LogBitsPerWord = LogBitsPerByte + LogBytesPerWord;
49 const int LogBitsPerLong = LogBitsPerByte + LogBytesPerLong;
51 const int BitsPerByte = 1 << LogBitsPerByte;
52 const int BitsPerShort = 1 << LogBitsPerShort;
53 const int BitsPerInt = 1 << LogBitsPerInt;
54 const int BitsPerWord = 1 << LogBitsPerWord;
55 const int BitsPerLong = 1 << LogBitsPerLong;
57 const int WordAlignmentMask = (1 << LogBytesPerWord) - 1;
58 const int LongAlignmentMask = (1 << LogBytesPerLong) - 1;
60 const int WordsPerLong = 2; // Number of stack entries for longs
62 const int oopSize = sizeof(char*); // Full-width oop
63 extern int heapOopSize; // Oop within a java object
64 const int wordSize = sizeof(char*);
65 const int longSize = sizeof(jlong);
66 const int jintSize = sizeof(jint);
67 const int size_tSize = sizeof(size_t);
69 const int BytesPerOop = BytesPerWord; // Full-width oop
71 extern int LogBytesPerHeapOop; // Oop within a java object
72 extern int LogBitsPerHeapOop;
73 extern int BytesPerHeapOop;
74 extern int BitsPerHeapOop;
76 const int BitsPerJavaInteger = 32;
77 const int BitsPerSize_t = size_tSize * BitsPerByte;
79 // Size of a char[] needed to represent a jint as a string in decimal.
80 const int jintAsStringSize = 12;
82 // In fact this should be
83 // log2_intptr(sizeof(class JavaThread)) - log2_intptr(64);
84 // see os::set_memory_serialize_page()
85 #ifdef _LP64
86 const int SerializePageShiftCount = 4;
87 #else
88 const int SerializePageShiftCount = 3;
89 #endif
91 // An opaque struct of heap-word width, so that HeapWord* can be a generic
92 // pointer into the heap. We require that object sizes be measured in
93 // units of heap words, so that that
94 // HeapWord* hw;
95 // hw += oop(hw)->foo();
96 // works, where foo is a method (like size or scavenge) that returns the
97 // object size.
98 class HeapWord {
99 friend class VMStructs;
100 private:
101 char* i;
102 #ifndef PRODUCT
103 public:
104 char* value() { return i; }
105 #endif
106 };
108 // HeapWordSize must be 2^LogHeapWordSize.
109 const int HeapWordSize = sizeof(HeapWord);
110 #ifdef _LP64
111 const int LogHeapWordSize = 3;
112 #else
113 const int LogHeapWordSize = 2;
114 #endif
115 const int HeapWordsPerLong = BytesPerLong / HeapWordSize;
116 const int LogHeapWordsPerLong = LogBytesPerLong - LogHeapWordSize;
118 // The larger HeapWordSize for 64bit requires larger heaps
119 // for the same application running in 64bit. See bug 4967770.
120 // The minimum alignment to a heap word size is done. Other
121 // parts of the memory system may required additional alignment
122 // and are responsible for those alignments.
123 #ifdef _LP64
124 #define ScaleForWordSize(x) align_size_down_((x) * 13 / 10, HeapWordSize)
125 #else
126 #define ScaleForWordSize(x) (x)
127 #endif
129 // The minimum number of native machine words necessary to contain "byte_size"
130 // bytes.
131 inline size_t heap_word_size(size_t byte_size) {
132 return (byte_size + (HeapWordSize-1)) >> LogHeapWordSize;
133 }
136 const size_t K = 1024;
137 const size_t M = K*K;
138 const size_t G = M*K;
139 const size_t HWperKB = K / sizeof(HeapWord);
141 const jint min_jint = (jint)1 << (sizeof(jint)*BitsPerByte-1); // 0x80000000 == smallest jint
142 const jint max_jint = (juint)min_jint - 1; // 0x7FFFFFFF == largest jint
144 // Constants for converting from a base unit to milli-base units. For
145 // example from seconds to milliseconds and microseconds
147 const int MILLIUNITS = 1000; // milli units per base unit
148 const int MICROUNITS = 1000000; // micro units per base unit
149 const int NANOUNITS = 1000000000; // nano units per base unit
151 inline const char* proper_unit_for_byte_size(size_t s) {
152 if (s >= 10*M) {
153 return "M";
154 } else if (s >= 10*K) {
155 return "K";
156 } else {
157 return "B";
158 }
159 }
161 inline size_t byte_size_in_proper_unit(size_t s) {
162 if (s >= 10*M) {
163 return s/M;
164 } else if (s >= 10*K) {
165 return s/K;
166 } else {
167 return s;
168 }
169 }
172 //----------------------------------------------------------------------------------------------------
173 // VM type definitions
175 // intx and uintx are the 'extended' int and 'extended' unsigned int types;
176 // they are 32bit wide on a 32-bit platform, and 64bit wide on a 64bit platform.
178 typedef intptr_t intx;
179 typedef uintptr_t uintx;
181 const intx min_intx = (intx)1 << (sizeof(intx)*BitsPerByte-1);
182 const intx max_intx = (uintx)min_intx - 1;
183 const uintx max_uintx = (uintx)-1;
185 // Table of values:
186 // sizeof intx 4 8
187 // min_intx 0x80000000 0x8000000000000000
188 // max_intx 0x7FFFFFFF 0x7FFFFFFFFFFFFFFF
189 // max_uintx 0xFFFFFFFF 0xFFFFFFFFFFFFFFFF
191 typedef unsigned int uint; NEEDS_CLEANUP
194 //----------------------------------------------------------------------------------------------------
195 // Java type definitions
197 // All kinds of 'plain' byte addresses
198 typedef signed char s_char;
199 typedef unsigned char u_char;
200 typedef u_char* address;
201 typedef uintptr_t address_word; // unsigned integer which will hold a pointer
202 // except for some implementations of a C++
203 // linkage pointer to function. Should never
204 // need one of those to be placed in this
205 // type anyway.
207 // Utility functions to "portably" (?) bit twiddle pointers
208 // Where portable means keep ANSI C++ compilers quiet
210 inline address set_address_bits(address x, int m) { return address(intptr_t(x) | m); }
211 inline address clear_address_bits(address x, int m) { return address(intptr_t(x) & ~m); }
213 // Utility functions to "portably" make cast to/from function pointers.
215 inline address_word mask_address_bits(address x, int m) { return address_word(x) & m; }
216 inline address_word castable_address(address x) { return address_word(x) ; }
217 inline address_word castable_address(void* x) { return address_word(x) ; }
219 // Pointer subtraction.
220 // The idea here is to avoid ptrdiff_t, which is signed and so doesn't have
221 // the range we might need to find differences from one end of the heap
222 // to the other.
223 // A typical use might be:
224 // if (pointer_delta(end(), top()) >= size) {
225 // // enough room for an object of size
226 // ...
227 // and then additions like
228 // ... top() + size ...
229 // are safe because we know that top() is at least size below end().
230 inline size_t pointer_delta(const void* left,
231 const void* right,
232 size_t element_size) {
233 return (((uintptr_t) left) - ((uintptr_t) right)) / element_size;
234 }
235 // A version specialized for HeapWord*'s.
236 inline size_t pointer_delta(const HeapWord* left, const HeapWord* right) {
237 return pointer_delta(left, right, sizeof(HeapWord));
238 }
240 //
241 // ANSI C++ does not allow casting from one pointer type to a function pointer
242 // directly without at best a warning. This macro accomplishes it silently
243 // In every case that is present at this point the value be cast is a pointer
244 // to a C linkage function. In somecase the type used for the cast reflects
245 // that linkage and a picky compiler would not complain. In other cases because
246 // there is no convenient place to place a typedef with extern C linkage (i.e
247 // a platform dependent header file) it doesn't. At this point no compiler seems
248 // picky enough to catch these instances (which are few). It is possible that
249 // using templates could fix these for all cases. This use of templates is likely
250 // so far from the middle of the road that it is likely to be problematic in
251 // many C++ compilers.
252 //
253 #define CAST_TO_FN_PTR(func_type, value) ((func_type)(castable_address(value)))
254 #define CAST_FROM_FN_PTR(new_type, func_ptr) ((new_type)((address_word)(func_ptr)))
256 // Unsigned byte types for os and stream.hpp
258 // Unsigned one, two, four and eigth byte quantities used for describing
259 // the .class file format. See JVM book chapter 4.
261 typedef jubyte u1;
262 typedef jushort u2;
263 typedef juint u4;
264 typedef julong u8;
266 const jubyte max_jubyte = (jubyte)-1; // 0xFF largest jubyte
267 const jushort max_jushort = (jushort)-1; // 0xFFFF largest jushort
268 const juint max_juint = (juint)-1; // 0xFFFFFFFF largest juint
269 const julong max_julong = (julong)-1; // 0xFF....FF largest julong
271 //----------------------------------------------------------------------------------------------------
272 // JVM spec restrictions
274 const int max_method_code_size = 64*K - 1; // JVM spec, 2nd ed. section 4.8.1 (p.134)
277 //----------------------------------------------------------------------------------------------------
278 // HotSwap - for JVMTI aka Class File Replacement and PopFrame
279 //
280 // Determines whether on-the-fly class replacement and frame popping are enabled.
282 #define HOTSWAP
284 //----------------------------------------------------------------------------------------------------
285 // Object alignment, in units of HeapWords.
286 //
287 // Minimum is max(BytesPerLong, BytesPerDouble, BytesPerOop) / HeapWordSize, so jlong, jdouble and
288 // reference fields can be naturally aligned.
290 const int MinObjAlignment = HeapWordsPerLong;
291 const int MinObjAlignmentInBytes = MinObjAlignment * HeapWordSize;
292 const int MinObjAlignmentInBytesMask = MinObjAlignmentInBytes - 1;
294 const int LogMinObjAlignment = LogHeapWordsPerLong;
295 const int LogMinObjAlignmentInBytes = LogMinObjAlignment + LogHeapWordSize;
297 // Machine dependent stuff
299 #include "incls/_globalDefinitions_pd.hpp.incl"
301 // The byte alignment to be used by Arena::Amalloc. See bugid 4169348.
302 // Note: this value must be a power of 2
304 #define ARENA_AMALLOC_ALIGNMENT (2*BytesPerWord)
306 // Signed variants of alignment helpers. There are two versions of each, a macro
307 // for use in places like enum definitions that require compile-time constant
308 // expressions and a function for all other places so as to get type checking.
310 #define align_size_up_(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1))
312 inline intptr_t align_size_up(intptr_t size, intptr_t alignment) {
313 return align_size_up_(size, alignment);
314 }
316 #define align_size_down_(size, alignment) ((size) & ~((alignment) - 1))
318 inline intptr_t align_size_down(intptr_t size, intptr_t alignment) {
319 return align_size_down_(size, alignment);
320 }
322 // Align objects by rounding up their size, in HeapWord units.
324 #define align_object_size_(size) align_size_up_(size, MinObjAlignment)
326 inline intptr_t align_object_size(intptr_t size) {
327 return align_size_up(size, MinObjAlignment);
328 }
330 // Pad out certain offsets to jlong alignment, in HeapWord units.
332 #define align_object_offset_(offset) align_size_up_(offset, HeapWordsPerLong)
334 inline intptr_t align_object_offset(intptr_t offset) {
335 return align_size_up(offset, HeapWordsPerLong);
336 }
338 inline bool is_object_aligned(intptr_t offset) {
339 return offset == align_object_offset(offset);
340 }
343 //----------------------------------------------------------------------------------------------------
344 // Utility macros for compilers
345 // used to silence compiler warnings
347 #define Unused_Variable(var) var
350 //----------------------------------------------------------------------------------------------------
351 // Miscellaneous
353 // 6302670 Eliminate Hotspot __fabsf dependency
354 // All fabs() callers should call this function instead, which will implicitly
355 // convert the operand to double, avoiding a dependency on __fabsf which
356 // doesn't exist in early versions of Solaris 8.
357 inline double fabsd(double value) {
358 return fabs(value);
359 }
361 inline jint low (jlong value) { return jint(value); }
362 inline jint high(jlong value) { return jint(value >> 32); }
364 // the fancy casts are a hopefully portable way
365 // to do unsigned 32 to 64 bit type conversion
366 inline void set_low (jlong* value, jint low ) { *value &= (jlong)0xffffffff << 32;
367 *value |= (jlong)(julong)(juint)low; }
369 inline void set_high(jlong* value, jint high) { *value &= (jlong)(julong)(juint)0xffffffff;
370 *value |= (jlong)high << 32; }
372 inline jlong jlong_from(jint h, jint l) {
373 jlong result = 0; // initialization to avoid warning
374 set_high(&result, h);
375 set_low(&result, l);
376 return result;
377 }
379 union jlong_accessor {
380 jint words[2];
381 jlong long_value;
382 };
384 void basic_types_init(); // cannot define here; uses assert
387 // NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/runtime/BasicType.java
388 enum BasicType {
389 T_BOOLEAN = 4,
390 T_CHAR = 5,
391 T_FLOAT = 6,
392 T_DOUBLE = 7,
393 T_BYTE = 8,
394 T_SHORT = 9,
395 T_INT = 10,
396 T_LONG = 11,
397 T_OBJECT = 12,
398 T_ARRAY = 13,
399 T_VOID = 14,
400 T_ADDRESS = 15,
401 T_NARROWOOP= 16,
402 T_CONFLICT = 17, // for stack value type with conflicting contents
403 T_ILLEGAL = 99
404 };
406 inline bool is_java_primitive(BasicType t) {
407 return T_BOOLEAN <= t && t <= T_LONG;
408 }
410 // Convert a char from a classfile signature to a BasicType
411 inline BasicType char2type(char c) {
412 switch( c ) {
413 case 'B': return T_BYTE;
414 case 'C': return T_CHAR;
415 case 'D': return T_DOUBLE;
416 case 'F': return T_FLOAT;
417 case 'I': return T_INT;
418 case 'J': return T_LONG;
419 case 'S': return T_SHORT;
420 case 'Z': return T_BOOLEAN;
421 case 'V': return T_VOID;
422 case 'L': return T_OBJECT;
423 case '[': return T_ARRAY;
424 }
425 return T_ILLEGAL;
426 }
428 extern char type2char_tab[T_CONFLICT+1]; // Map a BasicType to a jchar
429 inline char type2char(BasicType t) { return (uint)t < T_CONFLICT+1 ? type2char_tab[t] : 0; }
430 extern int type2size[T_CONFLICT+1]; // Map BasicType to result stack elements
431 extern const char* type2name_tab[T_CONFLICT+1]; // Map a BasicType to a jchar
432 inline const char* type2name(BasicType t) { return (uint)t < T_CONFLICT+1 ? type2name_tab[t] : NULL; }
433 extern BasicType name2type(const char* name);
435 // Auxilary math routines
436 // least common multiple
437 extern size_t lcm(size_t a, size_t b);
440 // NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/runtime/BasicType.java
441 enum BasicTypeSize {
442 T_BOOLEAN_size = 1,
443 T_CHAR_size = 1,
444 T_FLOAT_size = 1,
445 T_DOUBLE_size = 2,
446 T_BYTE_size = 1,
447 T_SHORT_size = 1,
448 T_INT_size = 1,
449 T_LONG_size = 2,
450 T_OBJECT_size = 1,
451 T_ARRAY_size = 1,
452 T_NARROWOOP_size = 1,
453 T_VOID_size = 0
454 };
457 // maps a BasicType to its instance field storage type:
458 // all sub-word integral types are widened to T_INT
459 extern BasicType type2field[T_CONFLICT+1];
460 extern BasicType type2wfield[T_CONFLICT+1];
463 // size in bytes
464 enum ArrayElementSize {
465 T_BOOLEAN_aelem_bytes = 1,
466 T_CHAR_aelem_bytes = 2,
467 T_FLOAT_aelem_bytes = 4,
468 T_DOUBLE_aelem_bytes = 8,
469 T_BYTE_aelem_bytes = 1,
470 T_SHORT_aelem_bytes = 2,
471 T_INT_aelem_bytes = 4,
472 T_LONG_aelem_bytes = 8,
473 #ifdef _LP64
474 T_OBJECT_aelem_bytes = 8,
475 T_ARRAY_aelem_bytes = 8,
476 #else
477 T_OBJECT_aelem_bytes = 4,
478 T_ARRAY_aelem_bytes = 4,
479 #endif
480 T_NARROWOOP_aelem_bytes = 4,
481 T_VOID_aelem_bytes = 0
482 };
484 extern int _type2aelembytes[T_CONFLICT+1]; // maps a BasicType to nof bytes used by its array element
485 #ifdef ASSERT
486 extern int type2aelembytes(BasicType t, bool allow_address = false); // asserts
487 #else
488 inline int type2aelembytes(BasicType t) { return _type2aelembytes[t]; }
489 #endif
492 // JavaValue serves as a container for arbitrary Java values.
494 class JavaValue {
496 public:
497 typedef union JavaCallValue {
498 jfloat f;
499 jdouble d;
500 jint i;
501 jlong l;
502 jobject h;
503 } JavaCallValue;
505 private:
506 BasicType _type;
507 JavaCallValue _value;
509 public:
510 JavaValue(BasicType t = T_ILLEGAL) { _type = t; }
512 JavaValue(jfloat value) {
513 _type = T_FLOAT;
514 _value.f = value;
515 }
517 JavaValue(jdouble value) {
518 _type = T_DOUBLE;
519 _value.d = value;
520 }
522 jfloat get_jfloat() const { return _value.f; }
523 jdouble get_jdouble() const { return _value.d; }
524 jint get_jint() const { return _value.i; }
525 jlong get_jlong() const { return _value.l; }
526 jobject get_jobject() const { return _value.h; }
527 JavaCallValue* get_value_addr() { return &_value; }
528 BasicType get_type() const { return _type; }
530 void set_jfloat(jfloat f) { _value.f = f;}
531 void set_jdouble(jdouble d) { _value.d = d;}
532 void set_jint(jint i) { _value.i = i;}
533 void set_jlong(jlong l) { _value.l = l;}
534 void set_jobject(jobject h) { _value.h = h;}
535 void set_type(BasicType t) { _type = t; }
537 jboolean get_jboolean() const { return (jboolean) (_value.i);}
538 jbyte get_jbyte() const { return (jbyte) (_value.i);}
539 jchar get_jchar() const { return (jchar) (_value.i);}
540 jshort get_jshort() const { return (jshort) (_value.i);}
542 };
545 #define STACK_BIAS 0
546 // V9 Sparc CPU's running in 64 Bit mode use a stack bias of 7ff
547 // in order to extend the reach of the stack pointer.
548 #if defined(SPARC) && defined(_LP64)
549 #undef STACK_BIAS
550 #define STACK_BIAS 0x7ff
551 #endif
554 // TosState describes the top-of-stack state before and after the execution of
555 // a bytecode or method. The top-of-stack value may be cached in one or more CPU
556 // registers. The TosState corresponds to the 'machine represention' of this cached
557 // value. There's 4 states corresponding to the JAVA types int, long, float & double
558 // as well as a 5th state in case the top-of-stack value is actually on the top
559 // of stack (in memory) and thus not cached. The atos state corresponds to the itos
560 // state when it comes to machine representation but is used separately for (oop)
561 // type specific operations (e.g. verification code).
563 enum TosState { // describes the tos cache contents
564 btos = 0, // byte, bool tos cached
565 ctos = 1, // short, char tos cached
566 stos = 2, // short, char tos cached
567 itos = 3, // int tos cached
568 ltos = 4, // long tos cached
569 ftos = 5, // float tos cached
570 dtos = 6, // double tos cached
571 atos = 7, // object cached
572 vtos = 8, // tos not cached
573 number_of_states,
574 ilgl // illegal state: should not occur
575 };
578 inline TosState as_TosState(BasicType type) {
579 switch (type) {
580 case T_BYTE : return btos;
581 case T_BOOLEAN: return btos;
582 case T_CHAR : return ctos;
583 case T_SHORT : return stos;
584 case T_INT : return itos;
585 case T_LONG : return ltos;
586 case T_FLOAT : return ftos;
587 case T_DOUBLE : return dtos;
588 case T_VOID : return vtos;
589 case T_ARRAY : // fall through
590 case T_OBJECT : return atos;
591 }
592 return ilgl;
593 }
596 // Helper function to convert BasicType info into TosState
597 // Note: Cannot define here as it uses global constant at the time being.
598 TosState as_TosState(BasicType type);
601 // ReferenceType is used to distinguish between java/lang/ref/Reference subclasses
603 enum ReferenceType {
604 REF_NONE, // Regular class
605 REF_OTHER, // Subclass of java/lang/ref/Reference, but not subclass of one of the classes below
606 REF_SOFT, // Subclass of java/lang/ref/SoftReference
607 REF_WEAK, // Subclass of java/lang/ref/WeakReference
608 REF_FINAL, // Subclass of java/lang/ref/FinalReference
609 REF_PHANTOM // Subclass of java/lang/ref/PhantomReference
610 };
613 // JavaThreadState keeps track of which part of the code a thread is executing in. This
614 // information is needed by the safepoint code.
615 //
616 // There are 4 essential states:
617 //
618 // _thread_new : Just started, but not executed init. code yet (most likely still in OS init code)
619 // _thread_in_native : In native code. This is a safepoint region, since all oops will be in jobject handles
620 // _thread_in_vm : Executing in the vm
621 // _thread_in_Java : Executing either interpreted or compiled Java code (or could be in a stub)
622 //
623 // Each state has an associated xxxx_trans state, which is an intermediate state used when a thread is in
624 // a transition from one state to another. These extra states makes it possible for the safepoint code to
625 // handle certain thread_states without having to suspend the thread - making the safepoint code faster.
626 //
627 // Given a state, the xxx_trans state can always be found by adding 1.
628 //
629 enum JavaThreadState {
630 _thread_uninitialized = 0, // should never happen (missing initialization)
631 _thread_new = 2, // just starting up, i.e., in process of being initialized
632 _thread_new_trans = 3, // corresponding transition state (not used, included for completness)
633 _thread_in_native = 4, // running in native code
634 _thread_in_native_trans = 5, // corresponding transition state
635 _thread_in_vm = 6, // running in VM
636 _thread_in_vm_trans = 7, // corresponding transition state
637 _thread_in_Java = 8, // running in Java or in stub code
638 _thread_in_Java_trans = 9, // corresponding transition state (not used, included for completness)
639 _thread_blocked = 10, // blocked in vm
640 _thread_blocked_trans = 11, // corresponding transition state
641 _thread_max_state = 12 // maximum thread state+1 - used for statistics allocation
642 };
645 // Handy constants for deciding which compiler mode to use.
646 enum MethodCompilation {
647 InvocationEntryBci = -1, // i.e., not a on-stack replacement compilation
648 InvalidOSREntryBci = -2
649 };
651 // Enumeration to distinguish tiers of compilation
652 enum CompLevel {
653 CompLevel_none = 0,
654 CompLevel_fast_compile = 1,
655 CompLevel_full_optimization = 2,
657 CompLevel_highest_tier = CompLevel_full_optimization,
658 #ifdef TIERED
659 CompLevel_initial_compile = CompLevel_fast_compile
660 #else
661 CompLevel_initial_compile = CompLevel_full_optimization
662 #endif // TIERED
663 };
665 inline bool is_tier1_compile(int comp_level) {
666 return comp_level == CompLevel_fast_compile;
667 }
668 inline bool is_tier2_compile(int comp_level) {
669 return comp_level == CompLevel_full_optimization;
670 }
671 inline bool is_highest_tier_compile(int comp_level) {
672 return comp_level == CompLevel_highest_tier;
673 }
675 //----------------------------------------------------------------------------------------------------
676 // 'Forward' declarations of frequently used classes
677 // (in order to reduce interface dependencies & reduce
678 // number of unnecessary compilations after changes)
680 class symbolTable;
681 class ClassFileStream;
683 class Event;
685 class Thread;
686 class VMThread;
687 class JavaThread;
688 class Threads;
690 class VM_Operation;
691 class VMOperationQueue;
693 class CodeBlob;
694 class nmethod;
695 class OSRAdapter;
696 class I2CAdapter;
697 class C2IAdapter;
698 class CompiledIC;
699 class relocInfo;
700 class ScopeDesc;
701 class PcDesc;
703 class Recompiler;
704 class Recompilee;
705 class RecompilationPolicy;
706 class RFrame;
707 class CompiledRFrame;
708 class InterpretedRFrame;
710 class frame;
712 class vframe;
713 class javaVFrame;
714 class interpretedVFrame;
715 class compiledVFrame;
716 class deoptimizedVFrame;
717 class externalVFrame;
718 class entryVFrame;
720 class RegisterMap;
722 class Mutex;
723 class Monitor;
724 class BasicLock;
725 class BasicObjectLock;
727 class PeriodicTask;
729 class JavaCallWrapper;
731 class oopDesc;
733 class NativeCall;
735 class zone;
737 class StubQueue;
739 class outputStream;
741 class ResourceArea;
743 class DebugInformationRecorder;
744 class ScopeValue;
745 class CompressedStream;
746 class DebugInfoReadStream;
747 class DebugInfoWriteStream;
748 class LocationValue;
749 class ConstantValue;
750 class IllegalValue;
752 class PrivilegedElement;
753 class MonitorArray;
755 class MonitorInfo;
757 class OffsetClosure;
758 class OopMapCache;
759 class InterpreterOopMap;
760 class OopMapCacheEntry;
761 class OSThread;
763 typedef int (*OSThreadStartFunc)(void*);
765 class Space;
767 class JavaValue;
768 class methodHandle;
769 class JavaCallArguments;
771 // Basic support for errors (general debug facilities not defined at this point fo the include phase)
773 extern void basic_fatal(const char* msg);
776 //----------------------------------------------------------------------------------------------------
777 // Special constants for debugging
779 const jint badInt = -3; // generic "bad int" value
780 const long badAddressVal = -2; // generic "bad address" value
781 const long badOopVal = -1; // generic "bad oop" value
782 const intptr_t badHeapOopVal = (intptr_t) CONST64(0x2BAD4B0BBAADBABE); // value used to zap heap after GC
783 const int badHandleValue = 0xBC; // value used to zap vm handle area
784 const int badResourceValue = 0xAB; // value used to zap resource area
785 const int freeBlockPad = 0xBA; // value used to pad freed blocks.
786 const int uninitBlockPad = 0xF1; // value used to zap newly malloc'd blocks.
787 const intptr_t badJNIHandleVal = (intptr_t) CONST64(0xFEFEFEFEFEFEFEFE); // value used to zap jni handle area
788 const juint badHeapWordVal = 0xBAADBABE; // value used to zap heap after GC
789 const int badCodeHeapNewVal= 0xCC; // value used to zap Code heap at allocation
790 const int badCodeHeapFreeVal = 0xDD; // value used to zap Code heap at deallocation
793 // (These must be implemented as #defines because C++ compilers are
794 // not obligated to inline non-integral constants!)
795 #define badAddress ((address)::badAddressVal)
796 #define badOop ((oop)::badOopVal)
797 #define badHeapWord (::badHeapWordVal)
798 #define badJNIHandle ((oop)::badJNIHandleVal)
801 //----------------------------------------------------------------------------------------------------
802 // Utility functions for bitfield manipulations
804 const intptr_t AllBits = ~0; // all bits set in a word
805 const intptr_t NoBits = 0; // no bits set in a word
806 const jlong NoLongBits = 0; // no bits set in a long
807 const intptr_t OneBit = 1; // only right_most bit set in a word
809 // get a word with the n.th or the right-most or left-most n bits set
810 // (note: #define used only so that they can be used in enum constant definitions)
811 #define nth_bit(n) (n >= BitsPerWord ? 0 : OneBit << (n))
812 #define right_n_bits(n) (nth_bit(n) - 1)
813 #define left_n_bits(n) (right_n_bits(n) << (n >= BitsPerWord ? 0 : (BitsPerWord - n)))
815 // bit-operations using a mask m
816 inline void set_bits (intptr_t& x, intptr_t m) { x |= m; }
817 inline void clear_bits (intptr_t& x, intptr_t m) { x &= ~m; }
818 inline intptr_t mask_bits (intptr_t x, intptr_t m) { return x & m; }
819 inline jlong mask_long_bits (jlong x, jlong m) { return x & m; }
820 inline bool mask_bits_are_true (intptr_t flags, intptr_t mask) { return (flags & mask) == mask; }
822 // bit-operations using the n.th bit
823 inline void set_nth_bit(intptr_t& x, int n) { set_bits (x, nth_bit(n)); }
824 inline void clear_nth_bit(intptr_t& x, int n) { clear_bits(x, nth_bit(n)); }
825 inline bool is_set_nth_bit(intptr_t x, int n) { return mask_bits (x, nth_bit(n)) != NoBits; }
827 // returns the bitfield of x starting at start_bit_no with length field_length (no sign-extension!)
828 inline intptr_t bitfield(intptr_t x, int start_bit_no, int field_length) {
829 return mask_bits(x >> start_bit_no, right_n_bits(field_length));
830 }
833 //----------------------------------------------------------------------------------------------------
834 // Utility functions for integers
836 // Avoid use of global min/max macros which may cause unwanted double
837 // evaluation of arguments.
838 #ifdef max
839 #undef max
840 #endif
842 #ifdef min
843 #undef min
844 #endif
846 #define max(a,b) Do_not_use_max_use_MAX2_instead
847 #define min(a,b) Do_not_use_min_use_MIN2_instead
849 // It is necessary to use templates here. Having normal overloaded
850 // functions does not work because it is necessary to provide both 32-
851 // and 64-bit overloaded functions, which does not work, and having
852 // explicitly-typed versions of these routines (i.e., MAX2I, MAX2L)
853 // will be even more error-prone than macros.
854 template<class T> inline T MAX2(T a, T b) { return (a > b) ? a : b; }
855 template<class T> inline T MIN2(T a, T b) { return (a < b) ? a : b; }
856 template<class T> inline T MAX3(T a, T b, T c) { return MAX2(MAX2(a, b), c); }
857 template<class T> inline T MIN3(T a, T b, T c) { return MIN2(MIN2(a, b), c); }
858 template<class T> inline T MAX4(T a, T b, T c, T d) { return MAX2(MAX3(a, b, c), d); }
859 template<class T> inline T MIN4(T a, T b, T c, T d) { return MIN2(MIN3(a, b, c), d); }
861 template<class T> inline T ABS(T x) { return (x > 0) ? x : -x; }
863 // true if x is a power of 2, false otherwise
864 inline bool is_power_of_2(intptr_t x) {
865 return ((x != NoBits) && (mask_bits(x, x - 1) == NoBits));
866 }
868 // long version of is_power_of_2
869 inline bool is_power_of_2_long(jlong x) {
870 return ((x != NoLongBits) && (mask_long_bits(x, x - 1) == NoLongBits));
871 }
873 //* largest i such that 2^i <= x
874 // A negative value of 'x' will return '31'
875 inline int log2_intptr(intptr_t x) {
876 int i = -1;
877 uintptr_t p = 1;
878 while (p != 0 && p <= (uintptr_t)x) {
879 // p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
880 i++; p *= 2;
881 }
882 // p = 2^(i+1) && x < p (i.e., 2^i <= x < 2^(i+1))
883 // (if p = 0 then overflow occured and i = 31)
884 return i;
885 }
887 //* largest i such that 2^i <= x
888 // A negative value of 'x' will return '63'
889 inline int log2_long(jlong x) {
890 int i = -1;
891 julong p = 1;
892 while (p != 0 && p <= (julong)x) {
893 // p = 2^(i+1) && p <= x (i.e., 2^(i+1) <= x)
894 i++; p *= 2;
895 }
896 // p = 2^(i+1) && x < p (i.e., 2^i <= x < 2^(i+1))
897 // (if p = 0 then overflow occured and i = 63)
898 return i;
899 }
901 //* the argument must be exactly a power of 2
902 inline int exact_log2(intptr_t x) {
903 #ifdef ASSERT
904 if (!is_power_of_2(x)) basic_fatal("x must be a power of 2");
905 #endif
906 return log2_intptr(x);
907 }
910 // returns integer round-up to the nearest multiple of s (s must be a power of two)
911 inline intptr_t round_to(intptr_t x, uintx s) {
912 #ifdef ASSERT
913 if (!is_power_of_2(s)) basic_fatal("s must be a power of 2");
914 #endif
915 const uintx m = s - 1;
916 return mask_bits(x + m, ~m);
917 }
919 // returns integer round-down to the nearest multiple of s (s must be a power of two)
920 inline intptr_t round_down(intptr_t x, uintx s) {
921 #ifdef ASSERT
922 if (!is_power_of_2(s)) basic_fatal("s must be a power of 2");
923 #endif
924 const uintx m = s - 1;
925 return mask_bits(x, ~m);
926 }
929 inline bool is_odd (intx x) { return x & 1; }
930 inline bool is_even(intx x) { return !is_odd(x); }
932 // "to" should be greater than "from."
933 inline intx byte_size(void* from, void* to) {
934 return (address)to - (address)from;
935 }
937 //----------------------------------------------------------------------------------------------------
938 // Avoid non-portable casts with these routines (DEPRECATED)
940 // NOTE: USE Bytes class INSTEAD WHERE POSSIBLE
941 // Bytes is optimized machine-specifically and may be much faster then the portable routines below.
943 // Given sequence of four bytes, build into a 32-bit word
944 // following the conventions used in class files.
945 // On the 386, this could be realized with a simple address cast.
946 //
948 // This routine takes eight bytes:
949 inline u8 build_u8_from( u1 c1, u1 c2, u1 c3, u1 c4, u1 c5, u1 c6, u1 c7, u1 c8 ) {
950 return ( u8(c1) << 56 ) & ( u8(0xff) << 56 )
951 | ( u8(c2) << 48 ) & ( u8(0xff) << 48 )
952 | ( u8(c3) << 40 ) & ( u8(0xff) << 40 )
953 | ( u8(c4) << 32 ) & ( u8(0xff) << 32 )
954 | ( u8(c5) << 24 ) & ( u8(0xff) << 24 )
955 | ( u8(c6) << 16 ) & ( u8(0xff) << 16 )
956 | ( u8(c7) << 8 ) & ( u8(0xff) << 8 )
957 | ( u8(c8) << 0 ) & ( u8(0xff) << 0 );
958 }
960 // This routine takes four bytes:
961 inline u4 build_u4_from( u1 c1, u1 c2, u1 c3, u1 c4 ) {
962 return ( u4(c1) << 24 ) & 0xff000000
963 | ( u4(c2) << 16 ) & 0x00ff0000
964 | ( u4(c3) << 8 ) & 0x0000ff00
965 | ( u4(c4) << 0 ) & 0x000000ff;
966 }
968 // And this one works if the four bytes are contiguous in memory:
969 inline u4 build_u4_from( u1* p ) {
970 return build_u4_from( p[0], p[1], p[2], p[3] );
971 }
973 // Ditto for two-byte ints:
974 inline u2 build_u2_from( u1 c1, u1 c2 ) {
975 return u2(( u2(c1) << 8 ) & 0xff00
976 | ( u2(c2) << 0 ) & 0x00ff);
977 }
979 // And this one works if the two bytes are contiguous in memory:
980 inline u2 build_u2_from( u1* p ) {
981 return build_u2_from( p[0], p[1] );
982 }
984 // Ditto for floats:
985 inline jfloat build_float_from( u1 c1, u1 c2, u1 c3, u1 c4 ) {
986 u4 u = build_u4_from( c1, c2, c3, c4 );
987 return *(jfloat*)&u;
988 }
990 inline jfloat build_float_from( u1* p ) {
991 u4 u = build_u4_from( p );
992 return *(jfloat*)&u;
993 }
996 // now (64-bit) longs
998 inline jlong build_long_from( u1 c1, u1 c2, u1 c3, u1 c4, u1 c5, u1 c6, u1 c7, u1 c8 ) {
999 return ( jlong(c1) << 56 ) & ( jlong(0xff) << 56 )
1000 | ( jlong(c2) << 48 ) & ( jlong(0xff) << 48 )
1001 | ( jlong(c3) << 40 ) & ( jlong(0xff) << 40 )
1002 | ( jlong(c4) << 32 ) & ( jlong(0xff) << 32 )
1003 | ( jlong(c5) << 24 ) & ( jlong(0xff) << 24 )
1004 | ( jlong(c6) << 16 ) & ( jlong(0xff) << 16 )
1005 | ( jlong(c7) << 8 ) & ( jlong(0xff) << 8 )
1006 | ( jlong(c8) << 0 ) & ( jlong(0xff) << 0 );
1007 }
1009 inline jlong build_long_from( u1* p ) {
1010 return build_long_from( p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7] );
1011 }
1014 // Doubles, too!
1015 inline jdouble build_double_from( u1 c1, u1 c2, u1 c3, u1 c4, u1 c5, u1 c6, u1 c7, u1 c8 ) {
1016 jlong u = build_long_from( c1, c2, c3, c4, c5, c6, c7, c8 );
1017 return *(jdouble*)&u;
1018 }
1020 inline jdouble build_double_from( u1* p ) {
1021 jlong u = build_long_from( p );
1022 return *(jdouble*)&u;
1023 }
1026 // Portable routines to go the other way:
1028 inline void explode_short_to( u2 x, u1& c1, u1& c2 ) {
1029 c1 = u1(x >> 8);
1030 c2 = u1(x);
1031 }
1033 inline void explode_short_to( u2 x, u1* p ) {
1034 explode_short_to( x, p[0], p[1]);
1035 }
1037 inline void explode_int_to( u4 x, u1& c1, u1& c2, u1& c3, u1& c4 ) {
1038 c1 = u1(x >> 24);
1039 c2 = u1(x >> 16);
1040 c3 = u1(x >> 8);
1041 c4 = u1(x);
1042 }
1044 inline void explode_int_to( u4 x, u1* p ) {
1045 explode_int_to( x, p[0], p[1], p[2], p[3]);
1046 }
1049 // Pack and extract shorts to/from ints:
1051 inline int extract_low_short_from_int(jint x) {
1052 return x & 0xffff;
1053 }
1055 inline int extract_high_short_from_int(jint x) {
1056 return (x >> 16) & 0xffff;
1057 }
1059 inline int build_int_from_shorts( jushort low, jushort high ) {
1060 return ((int)((unsigned int)high << 16) | (unsigned int)low);
1061 }
1063 // Printf-style formatters for fixed- and variable-width types as pointers and
1064 // integers.
1065 //
1066 // Each compiler-specific definitions file (e.g., globalDefinitions_gcc.hpp)
1067 // must define the macro FORMAT64_MODIFIER, which is the modifier for '%x' or
1068 // '%d' formats to indicate a 64-bit quantity; commonly "l" (in LP64) or "ll"
1069 // (in ILP32).
1071 // Format 32-bit quantities.
1072 #define INT32_FORMAT "%d"
1073 #define UINT32_FORMAT "%u"
1074 #define INT32_FORMAT_W(width) "%" #width "d"
1075 #define UINT32_FORMAT_W(width) "%" #width "u"
1077 #define PTR32_FORMAT "0x%08x"
1079 // Format 64-bit quantities.
1080 #define INT64_FORMAT "%" FORMAT64_MODIFIER "d"
1081 #define UINT64_FORMAT "%" FORMAT64_MODIFIER "u"
1082 #define PTR64_FORMAT "0x%016" FORMAT64_MODIFIER "x"
1084 #define INT64_FORMAT_W(width) "%" #width FORMAT64_MODIFIER "d"
1085 #define UINT64_FORMAT_W(width) "%" #width FORMAT64_MODIFIER "u"
1087 // Format macros that allow the field width to be specified. The width must be
1088 // a string literal (e.g., "8") or a macro that evaluates to one.
1089 #ifdef _LP64
1090 #define SSIZE_FORMAT_W(width) INT64_FORMAT_W(width)
1091 #define SIZE_FORMAT_W(width) UINT64_FORMAT_W(width)
1092 #else
1093 #define SSIZE_FORMAT_W(width) INT32_FORMAT_W(width)
1094 #define SIZE_FORMAT_W(width) UINT32_FORMAT_W(width)
1095 #endif // _LP64
1097 // Format pointers and size_t (or size_t-like integer types) which change size
1098 // between 32- and 64-bit.
1099 #ifdef _LP64
1100 #define PTR_FORMAT PTR64_FORMAT
1101 #define UINTX_FORMAT UINT64_FORMAT
1102 #define INTX_FORMAT INT64_FORMAT
1103 #define SIZE_FORMAT UINT64_FORMAT
1104 #define SSIZE_FORMAT INT64_FORMAT
1105 #else // !_LP64
1106 #define PTR_FORMAT PTR32_FORMAT
1107 #define UINTX_FORMAT UINT32_FORMAT
1108 #define INTX_FORMAT INT32_FORMAT
1109 #define SIZE_FORMAT UINT32_FORMAT
1110 #define SSIZE_FORMAT INT32_FORMAT
1111 #endif // _LP64
1113 #define INTPTR_FORMAT PTR_FORMAT
1115 // Enable zap-a-lot if in debug version.
1117 # ifdef ASSERT
1118 # ifdef COMPILER2
1119 # define ENABLE_ZAP_DEAD_LOCALS
1120 #endif /* COMPILER2 */
1121 # endif /* ASSERT */
1123 #define ARRAY_SIZE(array) (sizeof(array)/sizeof((array)[0]))