hotspot/src/share/vm/memory/universe.hpp
author johnc
Tue, 14 Jun 2011 11:01:10 -0700
changeset 9995 290620c08233
parent 8921 14bfe81f2a9d
child 10265 4c869854aebd
permissions -rw-r--r--
7004681: G1: Extend marking verification to Full GCs Summary: Perform a heap verification after the first phase of G1's full GC using objects' mark words to determine liveness. The third parameter of the heap verification routines, which was used in G1 to determine which marking bitmap to use in liveness calculations, has been changed from a boolean to an enum with values defined for using the mark word, and the 'prev' and 'next' bitmaps. Reviewed-by: tonyp, ysr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
8921
14bfe81f2a9d 7010070: Update all 2010 Oracle-changed OpenJDK files to have the proper copyright dates - second pass
trims
parents: 8076
diff changeset
     2
 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4450
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4450
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4450
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
    25
#ifndef SHARE_VM_MEMORY_UNIVERSE_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
    26
#define SHARE_VM_MEMORY_UNIVERSE_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
    28
#include "runtime/handles.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
    29
#include "utilities/growableArray.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
    30
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
// Universe is a name space holding known system classes and objects in the VM.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
// Loaded classes are accessible through the SystemDictionary.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
// The object heap is allocated and accessed through Universe, and various allocation
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
// support is provided. Allocation by the interpreter and compiled code is done inline
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
// and bails out to Scavenge::invoke_and_allocate.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
class CollectedHeap;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
class DeferredObjAllocEvent;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
// Common parts of a methodOop cache. This cache safely interacts with
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
// the RedefineClasses API.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
class CommonMethodOopCache : public CHeapObj {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  // We save the klassOop and the idnum of methodOop in order to get
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  // the current cached methodOop.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  klassOop              _klass;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  int                   _method_idnum;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  CommonMethodOopCache()   { _klass = NULL; _method_idnum = -1; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  ~CommonMethodOopCache()  { _klass = NULL; _method_idnum = -1; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  void     init(klassOop k, methodOop m, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  klassOop klass() const         { return _klass; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  int      method_idnum() const  { return _method_idnum; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
  // GC support
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  void     oops_do(OopClosure* f)  { f->do_oop((oop*)&_klass); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
// A helper class for caching a methodOop when the user of the cache
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
// cares about all versions of the methodOop.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
class ActiveMethodOopsCache : public CommonMethodOopCache {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
  // This subclass adds weak references to older versions of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
  // methodOop and a query method for a methodOop.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
  // If the cached methodOop has not been redefined, then
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  // _prev_methods will be NULL. If all of the previous
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  // versions of the method have been collected, then
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  // _prev_methods can have a length of zero.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  GrowableArray<jweak>* _prev_methods;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  ActiveMethodOopsCache()   { _prev_methods = NULL; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
  ~ActiveMethodOopsCache();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  void add_previous_version(const methodOop method);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  bool is_same_method(const methodOop method) const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
// A helper class for caching a methodOop when the user of the cache
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
// only cares about the latest version of the methodOop.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
class LatestMethodOopCache : public CommonMethodOopCache {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
  // This subclass adds a getter method for the latest methodOop.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  methodOop get_methodOop();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
2254
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
    99
// For UseCompressedOops.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   100
struct NarrowOopStruct {
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   101
  // Base address for oop-within-java-object materialization.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   102
  // NULL if using wide oops or zero based narrow oops.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   103
  address _base;
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   104
  // Number of shift bits for encoding/decoding narrow oops.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   105
  // 0 if using wide oops or zero based unscaled narrow oops,
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   106
  // LogMinObjAlignmentInBytes otherwise.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   107
  int     _shift;
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   108
  // Generate code with implicit null checks for narrow oops.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   109
  bool    _use_implicit_null_checks;
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   110
};
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   111
9995
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   112
enum VerifyOption {
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   113
      VerifyOption_Default = 0,
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   114
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   115
      // G1
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   116
      VerifyOption_G1UsePrevMarking = VerifyOption_Default,
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   117
      VerifyOption_G1UseNextMarking = VerifyOption_G1UsePrevMarking + 1,
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   118
      VerifyOption_G1UseMarkWord    = VerifyOption_G1UseNextMarking + 1
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   119
};
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
class Universe: AllStatic {
1668
8ec481b8f514 6578152: fill_region_with_object has usability and safety issues
jcoomes
parents: 670
diff changeset
   122
  // Ugh.  Universe is much too friendly.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
  friend class MarkSweep;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
  friend class oopDesc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
  friend class ClassLoader;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  friend class Arguments;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
  friend class SystemDictionary;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
  friend class VMStructs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  friend class CompactingPermGenGen;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  friend class VM_PopulateDumpSharedSpace;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  friend jint  universe_init();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
  friend void  universe2_init();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
  friend bool  universe_post_init();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
  // Known classes in the VM
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
  static klassOop _boolArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
  static klassOop _byteArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
  static klassOop _charArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
  static klassOop _intArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
  static klassOop _shortArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
  static klassOop _longArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
  static klassOop _singleArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
  static klassOop _doubleArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
  static klassOop _typeArrayKlassObjs[T_VOID+1];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
  static klassOop _objectArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
  static klassOop _methodKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  static klassOop _constMethodKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  static klassOop _methodDataKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  static klassOop _klassKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
  static klassOop _arrayKlassKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
  static klassOop _objArrayKlassKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
  static klassOop _typeArrayKlassKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
  static klassOop _instanceKlassKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
  static klassOop _constantPoolKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
  static klassOop _constantPoolCacheKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
  static klassOop _compiledICHolderKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
  static klassOop _systemObjArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
  // Known objects in the VM
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
  // Primitive objects
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
  static oop _int_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
  static oop _float_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
  static oop _double_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
  static oop _byte_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
  static oop _bool_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
  static oop _char_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
  static oop _long_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
  static oop _short_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
  static oop _void_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  static oop          _main_thread_group;             // Reference to the main thread group object
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
  static oop          _system_thread_group;           // Reference to the system thread group object
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
  static typeArrayOop _the_empty_byte_array;          // Canonicalized byte array
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  static typeArrayOop _the_empty_short_array;         // Canonicalized short array
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  static typeArrayOop _the_empty_int_array;           // Canonicalized int array
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
  static objArrayOop  _the_empty_system_obj_array;    // Canonicalized system obj array
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  static objArrayOop  _the_empty_class_klass_array;   // Canonicalized obj array of type java.lang.Class
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
  static objArrayOop  _the_array_interfaces_array;    // Canonicalized 2-array of cloneable & serializable klasses
4450
6d700b859b3e 6892658: C2 should optimize some stringbuilder patterns
never
parents: 3277
diff changeset
   185
  static oop          _the_null_string;               // A cache of "null" as a Java string
6d700b859b3e 6892658: C2 should optimize some stringbuilder patterns
never
parents: 3277
diff changeset
   186
  static oop          _the_min_jint_string;          // A cache of "-2147483648" as a Java string
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
  static LatestMethodOopCache* _finalizer_register_cache; // static method for registering finalizable objects
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
  static LatestMethodOopCache* _loader_addClass_cache;    // method for registering loaded classes in class loader vector
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  static ActiveMethodOopsCache* _reflect_invoke_cache;    // method for security checks
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
  static oop          _out_of_memory_error_java_heap; // preallocated error object (no backtrace)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  static oop          _out_of_memory_error_perm_gen;  // preallocated error object (no backtrace)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
  static oop          _out_of_memory_error_array_size;// preallocated error object (no backtrace)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
  static oop          _out_of_memory_error_gc_overhead_limit; // preallocated error object (no backtrace)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
  // array of preallocated error objects with backtrace
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
  static objArrayOop   _preallocated_out_of_memory_error_array;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
  // number of preallocated error objects available for use
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
  static volatile jint _preallocated_out_of_memory_error_avail_count;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
  static oop          _null_ptr_exception_instance;   // preallocated exception object
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  static oop          _arithmetic_exception_instance; // preallocated exception object
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
  static oop          _virtual_machine_error_instance; // preallocated exception object
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
  // The object used as an exception dummy when exceptions are thrown for
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
  // the vm thread.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  static oop          _vm_exception;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
  // The particular choice of collected heap.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
  static CollectedHeap* _collectedHeap;
2254
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   210
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   211
  // For UseCompressedOops.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   212
  static struct NarrowOopStruct _narrow_oop;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
  // array of dummy objects used with +FullGCAlot
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
  debug_only(static objArrayOop _fullgc_alot_dummy_array;)
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   216
  // index of next entry to clear
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
  debug_only(static int         _fullgc_alot_dummy_next;)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
  // Compiler/dispatch support
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
  static int  _base_vtable_size;                      // Java vtbl size of klass Object (in words)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
  // Initialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
  static bool _bootstrapping;                         // true during genesis
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
  static bool _fully_initialized;                     // true after universe_init and initialize_vtables called
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
  // the array of preallocated errors with backtraces
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
  static objArrayOop  preallocated_out_of_memory_errors()     { return _preallocated_out_of_memory_error_array; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
  // generate an out of memory error; if possible using an error with preallocated backtrace;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
  // otherwise return the given default error.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
  static oop        gen_out_of_memory_error(oop default_err);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
  // Historic gc information
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
  static size_t _heap_capacity_at_last_gc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
  static size_t _heap_used_at_last_gc;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
  static jint initialize_heap();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
  static void initialize_basic_type_mirrors(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
  static void fixup_mirrors(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
  static void reinitialize_vtable_of(KlassHandle h_k, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
  static void reinitialize_itables(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
  static void compute_base_vtable_size();             // compute vtable size of class Object
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
  static void genesis(TRAPS);                         // Create the initial world
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
  // Mirrors for primitive classes (created eagerly)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
  static oop check_mirror(oop m) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
    assert(m != NULL, "mirror not initialized");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
    return m;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
489c9b5090e2 Initial load
duke
parents:
diff changeset
   253
  // Debugging
489c9b5090e2 Initial load
duke
parents:
diff changeset
   254
  static int _verify_count;                           // number of verifies done
489c9b5090e2 Initial load
duke
parents:
diff changeset
   255
  // True during call to verify().  Should only be set/cleared in verify().
489c9b5090e2 Initial load
duke
parents:
diff changeset
   256
  static bool _verify_in_progress;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   257
489c9b5090e2 Initial load
duke
parents:
diff changeset
   258
  static void compute_verify_oop_data();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   259
489c9b5090e2 Initial load
duke
parents:
diff changeset
   260
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   261
  // Known classes in the VM
489c9b5090e2 Initial load
duke
parents:
diff changeset
   262
  static klassOop boolArrayKlassObj()                 { return _boolArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   263
  static klassOop byteArrayKlassObj()                 { return _byteArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   264
  static klassOop charArrayKlassObj()                 { return _charArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   265
  static klassOop intArrayKlassObj()                  { return _intArrayKlassObj;    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   266
  static klassOop shortArrayKlassObj()                { return _shortArrayKlassObj;  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   267
  static klassOop longArrayKlassObj()                 { return _longArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   268
  static klassOop singleArrayKlassObj()               { return _singleArrayKlassObj; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   269
  static klassOop doubleArrayKlassObj()               { return _doubleArrayKlassObj; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
  static klassOop objectArrayKlassObj() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   272
    return _objectArrayKlassObj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   273
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   274
489c9b5090e2 Initial load
duke
parents:
diff changeset
   275
  static klassOop typeArrayKlassObj(BasicType t) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   276
    assert((uint)t < T_VOID+1, "range check");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   277
    assert(_typeArrayKlassObjs[t] != NULL, "domain check");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   278
    return _typeArrayKlassObjs[t];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   279
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   280
489c9b5090e2 Initial load
duke
parents:
diff changeset
   281
  static klassOop methodKlassObj()                    { return _methodKlassObj;            }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   282
  static klassOop constMethodKlassObj()               { return _constMethodKlassObj;         }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   283
  static klassOop methodDataKlassObj()                { return _methodDataKlassObj;        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   284
  static klassOop klassKlassObj()                     { return _klassKlassObj;             }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   285
  static klassOop arrayKlassKlassObj()                { return _arrayKlassKlassObj;        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
  static klassOop objArrayKlassKlassObj()             { return _objArrayKlassKlassObj;     }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
  static klassOop typeArrayKlassKlassObj()            { return _typeArrayKlassKlassObj;    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
  static klassOop instanceKlassKlassObj()             { return _instanceKlassKlassObj;     }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
  static klassOop constantPoolKlassObj()              { return _constantPoolKlassObj;      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
  static klassOop constantPoolCacheKlassObj()         { return _constantPoolCacheKlassObj; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
  static klassOop compiledICHolderKlassObj()          { return _compiledICHolderKlassObj;  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
  static klassOop systemObjArrayKlassObj()            { return _systemObjArrayKlassObj;    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   293
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   294
  // Known objects in the VM
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   295
  static oop int_mirror()                   { return check_mirror(_int_mirror); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
  static oop float_mirror()                 { return check_mirror(_float_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   297
  static oop double_mirror()                { return check_mirror(_double_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   298
  static oop byte_mirror()                  { return check_mirror(_byte_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   299
  static oop bool_mirror()                  { return check_mirror(_bool_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   300
  static oop char_mirror()                  { return check_mirror(_char_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   301
  static oop long_mirror()                  { return check_mirror(_long_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   302
  static oop short_mirror()                 { return check_mirror(_short_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   303
  static oop void_mirror()                  { return check_mirror(_void_mirror); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   304
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
  // table of same
489c9b5090e2 Initial load
duke
parents:
diff changeset
   306
  static oop _mirrors[T_VOID+1];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   307
489c9b5090e2 Initial load
duke
parents:
diff changeset
   308
  static oop java_mirror(BasicType t) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   309
    assert((uint)t < T_VOID+1, "range check");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   310
    return check_mirror(_mirrors[t]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   311
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   312
  static oop      main_thread_group()                 { return _main_thread_group; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   313
  static void set_main_thread_group(oop group)        { _main_thread_group = group;}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   314
489c9b5090e2 Initial load
duke
parents:
diff changeset
   315
  static oop      system_thread_group()               { return _system_thread_group; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   316
  static void set_system_thread_group(oop group)      { _system_thread_group = group;}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   317
489c9b5090e2 Initial load
duke
parents:
diff changeset
   318
  static typeArrayOop the_empty_byte_array()          { return _the_empty_byte_array;          }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   319
  static typeArrayOop the_empty_short_array()         { return _the_empty_short_array;         }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
  static typeArrayOop the_empty_int_array()           { return _the_empty_int_array;           }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
  static objArrayOop  the_empty_system_obj_array ()   { return _the_empty_system_obj_array;    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   322
  static objArrayOop  the_empty_class_klass_array ()  { return _the_empty_class_klass_array;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   323
  static objArrayOop  the_array_interfaces_array()    { return _the_array_interfaces_array;    }
4450
6d700b859b3e 6892658: C2 should optimize some stringbuilder patterns
never
parents: 3277
diff changeset
   324
  static oop          the_null_string()               { return _the_null_string;               }
6d700b859b3e 6892658: C2 should optimize some stringbuilder patterns
never
parents: 3277
diff changeset
   325
  static oop          the_min_jint_string()          { return _the_min_jint_string;          }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   326
  static methodOop    finalizer_register_method()     { return _finalizer_register_cache->get_methodOop(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   327
  static methodOop    loader_addClass_method()        { return _loader_addClass_cache->get_methodOop(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   328
  static ActiveMethodOopsCache* reflect_invoke_cache() { return _reflect_invoke_cache; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   329
  static oop          null_ptr_exception_instance()   { return _null_ptr_exception_instance;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   330
  static oop          arithmetic_exception_instance() { return _arithmetic_exception_instance; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   331
  static oop          virtual_machine_error_instance() { return _virtual_machine_error_instance; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
  static oop          vm_exception()                  { return _vm_exception; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   333
489c9b5090e2 Initial load
duke
parents:
diff changeset
   334
  // OutOfMemoryError support. Returns an error with the required message. The returned error
489c9b5090e2 Initial load
duke
parents:
diff changeset
   335
  // may or may not have a backtrace. If error has a backtrace then the stack trace is already
489c9b5090e2 Initial load
duke
parents:
diff changeset
   336
  // filled in.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   337
  static oop out_of_memory_error_java_heap()          { return gen_out_of_memory_error(_out_of_memory_error_java_heap);  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   338
  static oop out_of_memory_error_perm_gen()           { return gen_out_of_memory_error(_out_of_memory_error_perm_gen);   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   339
  static oop out_of_memory_error_array_size()         { return gen_out_of_memory_error(_out_of_memory_error_array_size); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   340
  static oop out_of_memory_error_gc_overhead_limit()  { return gen_out_of_memory_error(_out_of_memory_error_gc_overhead_limit);  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   341
489c9b5090e2 Initial load
duke
parents:
diff changeset
   342
  // Accessors needed for fast allocation
489c9b5090e2 Initial load
duke
parents:
diff changeset
   343
  static klassOop* boolArrayKlassObj_addr()           { return &_boolArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   344
  static klassOop* byteArrayKlassObj_addr()           { return &_byteArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   345
  static klassOop* charArrayKlassObj_addr()           { return &_charArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   346
  static klassOop* intArrayKlassObj_addr()            { return &_intArrayKlassObj;    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   347
  static klassOop* shortArrayKlassObj_addr()          { return &_shortArrayKlassObj;  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   348
  static klassOop* longArrayKlassObj_addr()           { return &_longArrayKlassObj;   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   349
  static klassOop* singleArrayKlassObj_addr()         { return &_singleArrayKlassObj; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   350
  static klassOop* doubleArrayKlassObj_addr()         { return &_doubleArrayKlassObj; }
7114
65d21c4c6337 6984311: JSR 292 needs optional bootstrap method parameters
jrose
parents: 5547
diff changeset
   351
  static klassOop* systemObjArrayKlassObj_addr()      { return &_systemObjArrayKlassObj; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   352
489c9b5090e2 Initial load
duke
parents:
diff changeset
   353
  // The particular choice of collected heap.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   354
  static CollectedHeap* heap() { return _collectedHeap; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   355
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   356
  // For UseCompressedOops
2254
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   357
  static address* narrow_oop_base_addr()              { return &_narrow_oop._base; }
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   358
  static address  narrow_oop_base()                   { return  _narrow_oop._base; }
3275
bd2023eeea0a 6826736: CMS: core dump with -XX:+UseCompressedOops
kvn
parents: 2259
diff changeset
   359
  static bool  is_narrow_oop_base(void* addr)         { return (narrow_oop_base() == (address)addr); }
2254
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   360
  static int      narrow_oop_shift()                  { return  _narrow_oop._shift; }
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   361
  static void     set_narrow_oop_base(address base)   { _narrow_oop._base  = base; }
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   362
  static void     set_narrow_oop_shift(int shift)     { _narrow_oop._shift = shift; }
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   363
  static bool     narrow_oop_use_implicit_null_checks()             { return  _narrow_oop._use_implicit_null_checks; }
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   364
  static void     set_narrow_oop_use_implicit_null_checks(bool use) { _narrow_oop._use_implicit_null_checks = use; }
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   365
  // Narrow Oop encoding mode:
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   366
  // 0 - Use 32-bits oops without encoding when
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   367
  //     NarrowOopHeapBaseMin + heap_size < 4Gb
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   368
  // 1 - Use zero based compressed oops with encoding when
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   369
  //     NarrowOopHeapBaseMin + heap_size < 32Gb
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   370
  // 2 - Use compressed oops with heap base + encoding.
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   371
  enum NARROW_OOP_MODE {
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   372
    UnscaledNarrowOop  = 0,
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   373
    ZeroBasedNarrowOop = 1,
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   374
    HeapBasedNarrowOop = 2
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   375
  };
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1681
diff changeset
   376
  static char* preferred_heap_base(size_t heap_size, NARROW_OOP_MODE mode);
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
   377
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   378
  // Historic gc information
489c9b5090e2 Initial load
duke
parents:
diff changeset
   379
  static size_t get_heap_capacity_at_last_gc()         { return _heap_capacity_at_last_gc; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   380
  static size_t get_heap_free_at_last_gc()             { return _heap_capacity_at_last_gc - _heap_used_at_last_gc; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   381
  static size_t get_heap_used_at_last_gc()             { return _heap_used_at_last_gc; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   382
  static void update_heap_info_at_gc();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   383
489c9b5090e2 Initial load
duke
parents:
diff changeset
   384
  // Testers
489c9b5090e2 Initial load
duke
parents:
diff changeset
   385
  static bool is_bootstrapping()                      { return _bootstrapping; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   386
  static bool is_fully_initialized()                  { return _fully_initialized; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   387
489c9b5090e2 Initial load
duke
parents:
diff changeset
   388
  static inline bool element_type_should_be_aligned(BasicType type);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   389
  static inline bool field_type_should_be_aligned(BasicType type);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   390
  static bool        on_page_boundary(void* addr);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   391
  static bool        should_fill_in_stack_trace(Handle throwable);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   392
  static void check_alignment(uintx size, uintx alignment, const char* name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   393
489c9b5090e2 Initial load
duke
parents:
diff changeset
   394
  // Finalizer support.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   395
  static void run_finalizers_on_exit();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   396
489c9b5090e2 Initial load
duke
parents:
diff changeset
   397
  // Iteration
489c9b5090e2 Initial load
duke
parents:
diff changeset
   398
489c9b5090e2 Initial load
duke
parents:
diff changeset
   399
  // Apply "f" to the addresses of all the direct heap pointers maintained
489c9b5090e2 Initial load
duke
parents:
diff changeset
   400
  // as static fields of "Universe".
489c9b5090e2 Initial load
duke
parents:
diff changeset
   401
  static void oops_do(OopClosure* f, bool do_all = false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   402
489c9b5090e2 Initial load
duke
parents:
diff changeset
   403
  // Apply "f" to all klasses for basic types (classes not present in
489c9b5090e2 Initial load
duke
parents:
diff changeset
   404
  // SystemDictionary).
489c9b5090e2 Initial load
duke
parents:
diff changeset
   405
  static void basic_type_classes_do(void f(klassOop));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   406
489c9b5090e2 Initial load
duke
parents:
diff changeset
   407
  // Apply "f" to all system klasses (classes not present in SystemDictionary).
489c9b5090e2 Initial load
duke
parents:
diff changeset
   408
  static void system_classes_do(void f(klassOop));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   409
489c9b5090e2 Initial load
duke
parents:
diff changeset
   410
  // For sharing -- fill in a list of known vtable pointers.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   411
  static void init_self_patching_vtbl_list(void** list, int count);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   412
489c9b5090e2 Initial load
duke
parents:
diff changeset
   413
  // Debugging
489c9b5090e2 Initial load
duke
parents:
diff changeset
   414
  static bool verify_in_progress() { return _verify_in_progress; }
9995
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   415
  static void verify(bool allow_dirty = true, bool silent = false,
290620c08233 7004681: G1: Extend marking verification to Full GCs
johnc
parents: 8921
diff changeset
   416
                     VerifyOption option = VerifyOption_Default );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   417
  static int  verify_count()                  { return _verify_count; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   418
  static void print();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   419
  static void print_on(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   420
  static void print_heap_at_SIGBREAK();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   421
  static void print_heap_before_gc() { print_heap_before_gc(gclog_or_tty); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   422
  static void print_heap_after_gc()  { print_heap_after_gc(gclog_or_tty); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   423
  static void print_heap_before_gc(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   424
  static void print_heap_after_gc(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   425
489c9b5090e2 Initial load
duke
parents:
diff changeset
   426
  // Change the number of dummy objects kept reachable by the full gc dummy
489c9b5090e2 Initial load
duke
parents:
diff changeset
   427
  // array; this should trigger relocation in a sliding compaction collector.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   428
  debug_only(static bool release_fullgc_alot_dummy();)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   429
  // The non-oop pattern (see compiledIC.hpp, etc)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   430
  static void*   non_oop_word();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   431
489c9b5090e2 Initial load
duke
parents:
diff changeset
   432
  // Oop verification (see MacroAssembler::verify_oop)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   433
  static uintptr_t verify_oop_mask()          PRODUCT_RETURN0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   434
  static uintptr_t verify_oop_bits()          PRODUCT_RETURN0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   435
  static uintptr_t verify_mark_bits()         PRODUCT_RETURN0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   436
  static uintptr_t verify_mark_mask()         PRODUCT_RETURN0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   437
  static uintptr_t verify_klass_mask()        PRODUCT_RETURN0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   438
  static uintptr_t verify_klass_bits()        PRODUCT_RETURN0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   439
489c9b5090e2 Initial load
duke
parents:
diff changeset
   440
  // Flushing and deoptimization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   441
  static void flush_dependents_on(instanceKlassHandle dependee);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   442
#ifdef HOTSWAP
489c9b5090e2 Initial load
duke
parents:
diff changeset
   443
  // Flushing and deoptimization in case of evolution
489c9b5090e2 Initial load
duke
parents:
diff changeset
   444
  static void flush_evol_dependents_on(instanceKlassHandle dependee);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   445
#endif // HOTSWAP
489c9b5090e2 Initial load
duke
parents:
diff changeset
   446
  // Support for fullspeed debugging
489c9b5090e2 Initial load
duke
parents:
diff changeset
   447
  static void flush_dependents_on_method(methodHandle dependee);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   448
489c9b5090e2 Initial load
duke
parents:
diff changeset
   449
  // Compiler support
489c9b5090e2 Initial load
duke
parents:
diff changeset
   450
  static int base_vtable_size()               { return _base_vtable_size; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   451
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   452
489c9b5090e2 Initial load
duke
parents:
diff changeset
   453
class DeferredObjAllocEvent : public CHeapObj {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   454
  private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   455
    oop    _oop;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   456
    size_t _bytesize;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   457
    jint   _arena_id;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   458
489c9b5090e2 Initial load
duke
parents:
diff changeset
   459
  public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   460
    DeferredObjAllocEvent(const oop o, const size_t s, const jint id) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   461
      _oop      = o;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   462
      _bytesize = s;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   463
      _arena_id = id;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   464
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   465
489c9b5090e2 Initial load
duke
parents:
diff changeset
   466
    ~DeferredObjAllocEvent() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   467
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   468
489c9b5090e2 Initial load
duke
parents:
diff changeset
   469
    jint   arena_id() { return _arena_id; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   470
    size_t bytesize() { return _bytesize; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   471
    oop    get_oop()  { return _oop; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   472
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
   473
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 7114
diff changeset
   474
#endif // SHARE_VM_MEMORY_UNIVERSE_HPP