hotspot/src/share/vm/memory/compactingPermGenGen.hpp
author ysr
Tue, 01 Jul 2008 11:59:44 -0700
changeset 1383 3a216aa862b7
parent 1 489c9b5090e2
child 979 c9479f1e0a94
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
489c9b5090e2 Initial load
duke
parents:
diff changeset
     2
 * Copyright 2003-2006 Sun Microsystems, Inc.  All Rights Reserved.
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
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    19
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    20
 * CA 95054 USA or visit www.sun.com if you need additional information or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    21
 * have any questions.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
// All heaps contains a "permanent generation," containing permanent
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
// (reflective) objects.  This is like a regular generation in some ways,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
// but unlike one in others, and so is split apart.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
class PermanentGenerationSpec;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
// This is the "generation" view of a CompactingPermGen.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
class CompactingPermGenGen: public OneContigSpaceCardGeneration {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
  friend class VMStructs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
  // Abstractly, this is a subtype that gets access to protected fields.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
  friend class CompactingPermGen;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
  // Shared spaces
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  PermanentGenerationSpec* _spec;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
  size_t _shared_space_size;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
  VirtualSpace _ro_vs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
  VirtualSpace _rw_vs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
  VirtualSpace _md_vs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  VirtualSpace _mc_vs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
  BlockOffsetSharedArray* _ro_bts;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
  BlockOffsetSharedArray* _rw_bts;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  OffsetTableContigSpace* _ro_space;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  OffsetTableContigSpace* _rw_space;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  // With shared spaces there is a dicotomy in the use of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  // _virtual_space of the generation.  There is a portion of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  // _virtual_space that is used for the unshared part of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  // permanent generation and a portion that is reserved for the shared part.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  // The _reserved field in the generation represents both the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  // unshared and shared parts of the generation.  The _reserved
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  // variable is initialized for only the unshared part but is
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  // later extended to include the shared part during initialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  // if shared spaces are being used.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  // The reserved size for the _virtual_space for CompactingPermGenGen
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
  // is the size of the space for the permanent generation including the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
  // the shared spaces.  This can be seen by the use of MaxPermSize
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  // in the allocation of PermanentGenerationSpec.  The space for the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
  // shared spaces is committed separately (???).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  // In general at initialization only a part of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
  // space for the unshared part of the permanent generation is
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
  // committed and more is committed as the permanent generation is
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
  // grown.  In growing the permanent generation the capacity() and
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
  // max_capacity() of the generation are used.  For the permanent
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
  // generation (implemented with a CompactingPermGenGen) the capacity()
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
  // is taken from the capacity of the space (_the_space variable used for the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
  // unshared part of the generation) and the max_capacity() is based
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
  // on the size of the _reserved variable (which includes the size of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  // shared spaces) minus the size of the shared spaces.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  // These values are redundant, but are called out separately to avoid
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  // going through heap/space/gen pointers for performance.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  static HeapWord* unshared_bottom;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  static HeapWord* unshared_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  static HeapWord* shared_bottom;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
  static HeapWord* readonly_bottom;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  static HeapWord* readonly_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
  static HeapWord* readwrite_bottom;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  static HeapWord* readwrite_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  static HeapWord* miscdata_bottom;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  static HeapWord* miscdata_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
  static HeapWord* misccode_bottom;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
  static HeapWord* misccode_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
  static HeapWord* shared_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
  // List of klassOops whose vtbl entries are used to patch others.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
  static void**        _vtbl_list;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
  // Performance Counters
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  GenerationCounters*  _gen_counters;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  CSpaceCounters*      _space_counters;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  void initialize_performance_counters();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  enum {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
    vtbl_list_size = 16, // number of entries in the shared space vtable list.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
    num_virtuals = 100   // number of virtual methods in Klass (or
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
                         // subclass) objects, or greater.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  enum {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
    ro = 0,  // read-only shared space in the heap
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
    rw = 1,  // read-write shared space in the heap
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
    md = 2,  // miscellaneous data for initializing tables, etc.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
    mc = 3,  // miscellaneous code - vtable replacement.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
    n_regions = 4
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
  CompactingPermGenGen(ReservedSpace rs, ReservedSpace shared_rs,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
                       size_t initial_byte_size, int level, GenRemSet* remset,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
                       ContiguousSpace* space,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
                       PermanentGenerationSpec* perm_spec);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  const char* name() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
    return "compacting perm gen";
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
  const char* short_name() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
    return "Perm";
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
  // Return the maximum capacity for the object space.  This
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  // explicitly does not include the shared spaces.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  size_t max_capacity() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  void update_counters();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
  void compute_new_size() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
    assert(false, "Should not call this -- handled at PermGen level.");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
  bool must_be_youngest() const { return false; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
  bool must_be_oldest() const { return false; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
  OffsetTableContigSpace* ro_space() const { return _ro_space; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
  OffsetTableContigSpace* rw_space() const { return _rw_space; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
  VirtualSpace*           md_space()       { return &_md_vs; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
  VirtualSpace*           mc_space()       { return &_mc_vs; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
  ContiguousSpace* unshared_space() const { return _the_space; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
  static bool inline is_shared(const oopDesc* p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
    return (HeapWord*)p >= shared_bottom && (HeapWord*)p < shared_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
  // RedefineClasses note: this tester is used to check residence of
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  // the specified oop in the shared readonly space and not whether
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  // the oop is readonly.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  static bool inline is_shared_readonly(const oopDesc* p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
    return (HeapWord*)p >= readonly_bottom && (HeapWord*)p < readonly_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
  // RedefineClasses note: this tester is used to check residence of
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
  // the specified oop in the shared readwrite space and not whether
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
  // the oop is readwrite.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
  static bool inline is_shared_readwrite(const oopDesc* p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
    return (HeapWord*)p >= readwrite_bottom && (HeapWord*)p < readwrite_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
  bool is_in_unshared(const void* p) const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
    return OneContigSpaceCardGeneration::is_in(p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
  bool is_in_shared(const void* p) const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
   return p >= shared_bottom && p < shared_end;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
  inline bool is_in(const void* p) const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
    return is_in_unshared(p) || is_in_shared(p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
  inline PermanentGenerationSpec* spec() const { return _spec; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  inline void set_spec(PermanentGenerationSpec* spec) { _spec = spec; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
  void pre_adjust_pointers();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
  void adjust_pointers();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  void space_iterate(SpaceClosure* blk, bool usedOnly = false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  void print_on(outputStream* st) const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
  void younger_refs_iterate(OopsInGenClosure* blk);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  void compact();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
  void post_compact();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
  size_t contiguous_available() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
  bool grow_by(size_t bytes);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
  void grow_to_reserved();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  void clear_remembered_set();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
  void invalidate_remembered_set();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
  inline bool block_is_obj(const HeapWord* addr) const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
    if      (addr < the_space()->top()) return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
    else if (addr < the_space()->end()) return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
    else if (addr < ro_space()->top())  return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
    else if (addr < ro_space()->end())  return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
    else if (addr < rw_space()->top())  return true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
    else                                return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  inline size_t block_size(const HeapWord* addr) const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
    if (addr < the_space()->top()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
      return oop(addr)->size();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
    else if (addr < the_space()->end()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
      assert(addr == the_space()->top(), "non-block head arg to block_size");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
      return the_space()->end() - the_space()->top();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
    else if (addr < ro_space()->top()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
      return oop(addr)->size();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
    else if (addr < ro_space()->end()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
      assert(addr == ro_space()->top(), "non-block head arg to block_size");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
      return ro_space()->end() - ro_space()->top();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
    else if (addr < rw_space()->top()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
      return oop(addr)->size();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
    else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
      assert(addr == rw_space()->top(), "non-block head arg to block_size");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
      return rw_space()->end() - rw_space()->top();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
  static void generate_vtable_methods(void** vtbl_list,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
                                      void** vtable,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
                                      char** md_top, char* md_end,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
                                      char** mc_top, char* mc_end);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
  void verify(bool allow_dirty);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
  // Serialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
  static void initialize_oops() KERNEL_RETURN;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
  static void serialize_oops(SerializeOopClosure* soc);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
  void serialize_bts(SerializeOopClosure* soc);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
  // Initiate dumping of shared file.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
  static jint dump_shared(GrowableArray<oop>* class_promote_order, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
  // JVM/TI RedefineClasses() support:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
  // Remap the shared readonly space to shared readwrite, private if
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
  // sharing is enabled. Simply returns true if sharing is not enabled
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
  // or if the remapping has already been done by a prior call.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
  static bool remap_shared_readonly_as_readwrite();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
};