hotspot/src/share/vm/runtime/virtualspace.hpp
author coleenp
Wed, 20 Mar 2013 08:04:54 -0400
changeset 16430 882cddc35bec
parent 13728 882756847a04
child 17113 5928fcab633d
permissions -rw-r--r--
8008217: CDS: Class data sharing limits the malloc heap on Solaris Summary: In 64bit VM move CDS archive address to 32G on all platforms using new flag SharedBaseAddress. In 32bit VM set CDS archive address to 3Gb on Linux and let other OSs pick the address. Reviewed-by: kvn, dcubed, zgu, hseigel
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 7397
diff changeset
     2
 * Copyright (c) 1997, 2012, 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: 3261
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 3261
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: 3261
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: 5547
diff changeset
    25
#ifndef SHARE_VM_RUNTIME_VIRTUALSPACE_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    26
#define SHARE_VM_RUNTIME_VIRTUALSPACE_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    28
#include "memory/allocation.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    29
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
// ReservedSpace is a data structure for reserving a contiguous address range.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
class ReservedSpace VALUE_OBJ_CLASS_SPEC {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
  friend class VMStructs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
  char*  _base;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
  size_t _size;
823
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    37
  size_t _noaccess_prefix;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
  size_t _alignment;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  bool   _special;
2268
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    40
  bool   _executable;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
  // ReservedSpace
2268
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    43
  ReservedSpace(char* base, size_t size, size_t alignment, bool special,
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    44
                bool executable);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
  void initialize(size_t size, size_t alignment, bool large,
823
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    46
                  char* requested_address,
2268
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    47
                  const size_t noaccess_prefix,
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    48
                  bool executable);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  // Release parts of an already-reserved memory region [addr, addr + len) to
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  // get a new region that has "compound alignment."  Return the start of the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  // resulting region, or NULL on failure.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  // The region is logically divided into a prefix and a suffix.  The prefix
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  // starts at the result address, which is aligned to prefix_align.  The suffix
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  // starts at result address + prefix_size, which is aligned to suffix_align.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  // The total size of the result region is size prefix_size + suffix_size.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  char* align_reserved_region(char* addr, const size_t len,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
                              const size_t prefix_size,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
                              const size_t prefix_align,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
                              const size_t suffix_size,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
                              const size_t suffix_align);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  // Reserve memory, call align_reserved_region() to alignment it and return the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
  // result.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
  char* reserve_and_align(const size_t reserve_size,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
                          const size_t prefix_size,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
                          const size_t prefix_align,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
                          const size_t suffix_size,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
                          const size_t suffix_align);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
823
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    72
 protected:
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    73
  // Create protection page at the beginning of the space.
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    74
  void protect_noaccess_prefix(const size_t size);
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    75
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  // Constructor
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  ReservedSpace(size_t size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  ReservedSpace(size_t size, size_t alignment, bool large,
823
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    80
                char* requested_address = NULL,
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
    81
                const size_t noaccess_prefix = 0);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 7397
diff changeset
    82
  ReservedSpace(const size_t suffix_size, const size_t suffix_align,
2254
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1217
diff changeset
    83
                char* requested_address,
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1217
diff changeset
    84
                const size_t noaccess_prefix = 0);
2268
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    85
  ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
  // Accessors
2268
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    88
  char*  base()            const { return _base;      }
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    89
  size_t size()            const { return _size;      }
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    90
  size_t alignment()       const { return _alignment; }
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    91
  bool   special()         const { return _special;   }
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    92
  bool   executable()      const { return _executable;   }
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    93
  size_t noaccess_prefix() const { return _noaccess_prefix;   }
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
    94
  bool is_reserved()       const { return _base != NULL; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  void release();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  // Splitting
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  ReservedSpace first_part(size_t partition_size, size_t alignment,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
                           bool split = false, bool realloc = true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  ReservedSpace last_part (size_t partition_size, size_t alignment);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  // These simply call the above using the default alignment.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  inline ReservedSpace first_part(size_t partition_size,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
                                  bool split = false, bool realloc = true);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  inline ReservedSpace last_part (size_t partition_size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  // Alignment
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
  static size_t page_align_size_up(size_t size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
  static size_t page_align_size_down(size_t size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
  static size_t allocation_align_size_up(size_t size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
  static size_t allocation_align_size_down(size_t size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
ReservedSpace
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
ReservedSpace::first_part(size_t partition_size, bool split, bool realloc)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
{
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
  return first_part(partition_size, alignment(), split, realloc);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
ReservedSpace ReservedSpace::last_part(size_t partition_size)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
{
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  return last_part(partition_size, alignment());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
823
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   125
// Class encapsulating behavior specific of memory space reserved for Java heap
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   126
class ReservedHeapSpace : public ReservedSpace {
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   127
public:
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   128
  // Constructor
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   129
  ReservedHeapSpace(size_t size, size_t forced_base_alignment,
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   130
                    bool large, char* requested_address);
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   131
  ReservedHeapSpace(const size_t prefix_size, const size_t prefix_align,
2254
f13dda645a4b 6791178: Specialize for zero as the compressed oop vm heap base
kvn
parents: 1217
diff changeset
   132
                    char* requested_address);
823
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   133
};
9a5271881bc0 6716785: implicit null checks not triggering with CompressedOops
coleenp
parents: 1
diff changeset
   134
2268
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   135
// Class encapsulating behavior specific memory space for Code
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   136
class ReservedCodeSpace : public ReservedSpace {
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   137
 public:
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   138
  // Constructor
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   139
  ReservedCodeSpace(size_t r_size, size_t rs_align, bool large);
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   140
};
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   141
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
// VirtualSpace is data structure for committing a previously reserved address range in smaller chunks.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
class VirtualSpace VALUE_OBJ_CLASS_SPEC {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
  friend class VMStructs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
 private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
  // Reserved area
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
  char* _low_boundary;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
  char* _high_boundary;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  // Committed area
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  char* _low;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  char* _high;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
  // The entire space has been committed and pinned in memory, no
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
  // os::commit_memory() or os::uncommit_memory().
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
  bool _special;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
2268
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   159
  // Need to know if commit should be executable.
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   160
  bool   _executable;
bea8be80ec88 6541756: Reduce executable C-heap
coleenp
parents: 2254
diff changeset
   161
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
  // MPSS Support
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
  // Each virtualspace region has a lower, middle, and upper region.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
  // Each region has an end boundary and a high pointer which is the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
  // high water mark for the last allocated byte.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
  // The lower and upper unaligned to LargePageSizeInBytes uses default page.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
  // size.  The middle region uses large page size.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
  char* _lower_high;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
  char* _middle_high;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
  char* _upper_high;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
  char* _lower_high_boundary;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
  char* _middle_high_boundary;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
  char* _upper_high_boundary;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  size_t _lower_alignment;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
  size_t _middle_alignment;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
  size_t _upper_alignment;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  // MPSS Accessors
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  char* lower_high() const { return _lower_high; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
  char* middle_high() const { return _middle_high; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  char* upper_high() const { return _upper_high; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
  char* lower_high_boundary() const { return _lower_high_boundary; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
  char* middle_high_boundary() const { return _middle_high_boundary; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
  char* upper_high_boundary() const { return _upper_high_boundary; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  size_t lower_alignment() const { return _lower_alignment; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
  size_t middle_alignment() const { return _middle_alignment; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  size_t upper_alignment() const { return _upper_alignment; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
  // Committed area
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
  char* low()  const { return _low; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
  char* high() const { return _high; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
  // Reserved area
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
  char* low_boundary()  const { return _low_boundary; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
  char* high_boundary() const { return _high_boundary; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  bool special() const { return _special; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
  // Initialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  VirtualSpace();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
  bool initialize(ReservedSpace rs, size_t committed_byte_size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
  // Destruction
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
  ~VirtualSpace();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
  // Testers (all sizes are byte sizes)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
  size_t committed_size()   const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
  size_t reserved_size()    const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
  size_t uncommitted_size() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
  bool   contains(const void* p)  const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
  // Operations
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
  // returns true on success, false otherwise
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
  bool expand_by(size_t bytes, bool pre_touch = false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
  void shrink_by(size_t bytes);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
  void release();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
  void check_for_contiguity() PRODUCT_RETURN;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
  // Debugging
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
  void print() PRODUCT_RETURN;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   229
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   230
#endif // SHARE_VM_RUNTIME_VIRTUALSPACE_HPP