src/hotspot/share/gc/g1/g1AllocRegion.hpp
author sangheki
Wed, 13 Nov 2019 10:49:12 -0800
changeset 59060 fce1fa1bdc91
parent 54843 25c329958c70
child 59061 df6f2350edfa
permissions -rw-r--r--
8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3) Reviewed-by: kbarrett, sjohanss, tschatzl, pliden
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     1
/*
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49945
diff changeset
     2
 * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     4
 *
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     7
 * published by the Free Software Foundation.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     8
 *
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    13
 * accompanied this code).
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    14
 *
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    18
 *
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    21
 * questions.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    22
 *
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    23
 */
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    24
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49945
diff changeset
    25
#ifndef SHARE_GC_G1_G1ALLOCREGION_HPP
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49945
diff changeset
    26
#define SHARE_GC_G1_G1ALLOCREGION_HPP
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    27
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 26837
diff changeset
    28
#include "gc/g1/heapRegion.hpp"
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
    29
#include "gc/g1/g1EvacStats.hpp"
54843
25c329958c70 8200545: Improve filter for enqueued deferred cards
tschatzl
parents: 53244
diff changeset
    30
#include "gc/g1/g1HeapRegionAttr.hpp"
59060
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
    31
#include "gc/g1/g1NUMA.hpp"
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    32
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    33
class G1CollectedHeap;
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    34
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    35
// A class that holds a region that is active in satisfying allocation
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    36
// requests, potentially issued in parallel. When the active region is
10243
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    37
// full it will be retired and replaced with a new one. The
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    38
// implementation assumes that fast-path allocations will be lock-free
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    39
// and a lock will need to be taken when the active region needs to be
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    40
// replaced.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    41
59060
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
    42
class G1AllocRegion : public CHeapObj<mtGC> {
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    43
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    44
private:
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    45
  // The active allocating region we are currently allocating out
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    46
  // of. The invariant is that if this object is initialized (i.e.,
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    47
  // init() has been called and release() has not) then _alloc_region
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    48
  // is either an active allocating region or the dummy region (i.e.,
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    49
  // it can never be NULL) and this object can be used to satisfy
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    50
  // allocation requests. If this object is not initialized
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    51
  // (i.e. init() has not been called or release() has been called)
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    52
  // then _alloc_region is NULL and this object should not be used to
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    53
  // satisfy allocation requests (it was done this way to force the
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    54
  // correct use of init() and release()).
21119
ca1c9dd0e277 8025728: Missing volatile specifier for field G1AllocRegion::_alloc_region
tschatzl
parents: 12381
diff changeset
    55
  HeapRegion* volatile _alloc_region;
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    56
10243
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    57
  // It keeps track of the distinct number of regions that are used
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    58
  // for allocation in the active interval of this object, i.e.,
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    59
  // between a call to init() and a call to release(). The count
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    60
  // mostly includes regions that are freshly allocated, as well as
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    61
  // the region that is re-used using the set() method. This count can
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    62
  // be used in any heuristics that might want to bound how many
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    63
  // distinct regions this object can used during an active interval.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10243
diff changeset
    64
  uint _count;
10243
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    65
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    66
  // When we set up a new active region we save its used bytes in this
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    67
  // field so that, when we retire it, we can calculate how much space
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    68
  // we allocated in it.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    69
  size_t _used_bytes_before;
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    70
10243
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    71
  // When true, indicates that allocate calls should do BOT updates.
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
    72
  const bool _bot_updates;
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    73
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    74
  // Useful for debugging and tracing.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    75
  const char* _name;
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    76
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    77
  // A dummy region (i.e., it's been allocated specially for this
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    78
  // purpose and it is not part of the heap) that is full (i.e., top()
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    79
  // == end()). When we don't have a valid active region we make
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    80
  // _alloc_region point to this. This allows us to skip checking
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    81
  // whether the _alloc_region is NULL or not.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    82
  static HeapRegion* _dummy_region;
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
    83
49945
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    84
  // After a region is allocated by alloc_new_region, this
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    85
  // method is used to set it as the active alloc_region
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    86
  void update_alloc_region(HeapRegion* alloc_region);
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    87
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    88
  // Allocate a new active region and use it to perform a word_size
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    89
  // allocation. The force parameter will be passed on to
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    90
  // G1CollectedHeap::allocate_new_alloc_region() and tells it to try
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    91
  // to allocate a new region even if the max has been reached.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    92
  HeapWord* new_alloc_region_and_allocate(size_t word_size, bool force);
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    93
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    94
protected:
59060
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
    95
  // The memory node index this allocation region belongs to.
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
    96
  uint _node_index;
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
    97
49945
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    98
  // Reset the alloc region to point a the dummy region.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
    99
  void reset_alloc_region();
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   100
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   101
  // Perform a non-MT-safe allocation out of the given region.
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   102
  inline HeapWord* allocate(HeapRegion* alloc_region,
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   103
                            size_t word_size);
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   104
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   105
  // Perform a MT-safe allocation out of the given region.
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   106
  inline HeapWord* par_allocate(HeapRegion* alloc_region,
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   107
                                size_t word_size);
32389
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   108
  // Perform a MT-safe allocation out of the given region, with the given
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   109
  // minimum and desired size. Returns the actual size allocated (between
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   110
  // minimum and desired size) in actual_word_size if the allocation has been
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   111
  // successful.
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   112
  inline HeapWord* par_allocate(HeapRegion* alloc_region,
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   113
                                size_t min_word_size,
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   114
                                size_t desired_word_size,
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   115
                                size_t* actual_word_size);
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   116
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   117
  // Ensure that the region passed as a parameter has been filled up
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   118
  // so that noone else can allocate out of it any more.
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   119
  // Returns the number of bytes that have been wasted by filled up
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   120
  // the space.
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   121
  size_t fill_up_remaining_space(HeapRegion* alloc_region);
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   122
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   123
  // Retire the active allocating region. If fill_up is true then make
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   124
  // sure that the region is full before we retire it so that no one
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   125
  // else can allocate out of it.
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   126
  // Returns the number of bytes that have been filled up during retire.
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   127
  virtual size_t retire(bool fill_up);
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   128
49945
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   129
  size_t retire_internal(HeapRegion* alloc_region, bool fill_up);
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   130
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   131
  // For convenience as subclasses use it.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   132
  static G1CollectedHeap* _g1h;
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   133
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   134
  virtual HeapRegion* allocate_new_region(size_t word_size, bool force) = 0;
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   135
  virtual void retire_region(HeapRegion* alloc_region,
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   136
                             size_t allocated_bytes) = 0;
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   137
59060
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
   138
  G1AllocRegion(const char* name, bool bot_updates, uint node_index);
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   139
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   140
public:
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   141
  static void setup(G1CollectedHeap* g1h, HeapRegion* dummy_region);
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   142
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   143
  HeapRegion* get() const {
21119
ca1c9dd0e277 8025728: Missing volatile specifier for field G1AllocRegion::_alloc_region
tschatzl
parents: 12381
diff changeset
   144
    HeapRegion * hr = _alloc_region;
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   145
    // Make sure that the dummy region does not escape this class.
21119
ca1c9dd0e277 8025728: Missing volatile specifier for field G1AllocRegion::_alloc_region
tschatzl
parents: 12381
diff changeset
   146
    return (hr == _dummy_region) ? NULL : hr;
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   147
  }
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   148
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10243
diff changeset
   149
  uint count() { return _count; }
10243
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
   150
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   151
  // The following two are the building blocks for the allocation method.
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   152
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   153
  // First-level allocation: Should be called without holding a
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   154
  // lock. It will try to allocate lock-free out of the active region,
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   155
  // or return NULL if it was unable to.
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   156
  inline HeapWord* attempt_allocation(size_t word_size);
32389
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   157
  // Perform an allocation out of the current allocation region, with the given
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   158
  // minimum and desired size. Returns the actual size allocated (between
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   159
  // minimum and desired size) in actual_word_size if the allocation has been
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   160
  // successful.
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   161
  // Should be called without holding a lock. It will try to allocate lock-free
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   162
  // out of the active region, or return NULL if it was unable to.
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   163
  inline HeapWord* attempt_allocation(size_t min_word_size,
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   164
                                      size_t desired_word_size,
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   165
                                      size_t* actual_word_size);
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   166
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   167
  // Second-level allocation: Should be called while holding a
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   168
  // lock. It will try to first allocate lock-free out of the active
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   169
  // region or, if it's unable to, it will try to replace the active
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   170
  // alloc region with a new one. We require that the caller takes the
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   171
  // appropriate lock before calling this so that it is easier to make
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   172
  // it conform to its locking protocol.
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   173
  inline HeapWord* attempt_allocation_locked(size_t word_size);
32389
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   174
  // Same as attempt_allocation_locked(size_t, bool), but allowing specification
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   175
  // of minimum word size of the block in min_word_size, and the maximum word
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   176
  // size of the allocation in desired_word_size. The actual size of the block is
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   177
  // returned in actual_word_size.
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   178
  inline HeapWord* attempt_allocation_locked(size_t min_word_size,
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   179
                                             size_t desired_word_size,
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   180
                                             size_t* actual_word_size);
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   181
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   182
  // Should be called to allocate a new region even if the max of this
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   183
  // type of regions has been reached. Should only be called if other
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   184
  // allocation attempts have failed and we are not holding a valid
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   185
  // active region.
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   186
  inline HeapWord* attempt_allocation_force(size_t word_size);
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   187
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   188
  // Should be called before we start using this object.
49945
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   189
  virtual void init();
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   190
10243
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
   191
  // This can be used to set the active region to a specific
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
   192
  // region. (Use Example: we try to retain the last old GC alloc
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
   193
  // region that we've used during a GC and we can use set() to
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
   194
  // re-instate it at the beginning of the next GC.)
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
   195
  void set(HeapRegion* alloc_region);
d00a21009f1f 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
tonyp
parents: 8928
diff changeset
   196
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   197
  // Should be called when we want to release the active region which
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   198
  // is returned after it's been retired.
26159
6033a6fc63cc 8044406: JVM crash with JDK8 (build 1.8.0-b132) with G1 GC
poonam
parents: 24424
diff changeset
   199
  virtual HeapRegion* release();
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   200
32389
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   201
  void trace(const char* str,
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   202
             size_t min_word_size = 0,
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   203
             size_t desired_word_size = 0,
626f27450e12 8067336: Allow that PLAB allocations at the end of regions are flexible
tschatzl
parents: 32379
diff changeset
   204
             size_t actual_word_size = 0,
37171
b968bbc6291c 8152300: Convert G1_ALLOC_REGION_TRACING to unified logging
brutisso
parents: 33105
diff changeset
   205
             HeapWord* result = NULL) PRODUCT_RETURN;
8928
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   206
};
e5c53268bef5 7023069: G1: Introduce symmetric locking in the slow allocation path
tonyp
parents:
diff changeset
   207
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   208
class MutatorAllocRegion : public G1AllocRegion {
49945
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   209
private:
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   210
  // Keeps track of the total waste generated during the current
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   211
  // mutator phase.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   212
  size_t _wasted_bytes;
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   213
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   214
  // Retained allocation region. Used to lower the waste generated
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   215
  // during mutation by having two active regions if the free space
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   216
  // in a region about to be retired still could fit a TLAB.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   217
  HeapRegion* volatile _retained_alloc_region;
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   218
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   219
  // Decide if the region should be retained, based on the free size
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   220
  // in it and the free size in the currently retained region, if any.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   221
  bool should_retain(HeapRegion* region);
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   222
protected:
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   223
  virtual HeapRegion* allocate_new_region(size_t word_size, bool force);
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   224
  virtual void retire_region(HeapRegion* alloc_region, size_t allocated_bytes);
49945
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   225
  virtual size_t retire(bool fill_up);
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   226
public:
59060
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
   227
  MutatorAllocRegion(uint node_index)
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
   228
    : G1AllocRegion("Mutator Alloc Region", false /* bot_updates */, node_index),
49945
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   229
      _wasted_bytes(0),
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   230
      _retained_alloc_region(NULL) { }
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   231
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   232
  // Returns the combined used memory in the current alloc region and
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   233
  // the retained alloc region.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   234
  size_t used_in_alloc_regions();
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   235
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   236
  // Perform an allocation out of the retained allocation region, with the given
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   237
  // minimum and desired size. Returns the actual size allocated (between
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   238
  // minimum and desired size) in actual_word_size if the allocation has been
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   239
  // successful.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   240
  // Should be called without holding a lock. It will try to allocate lock-free
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   241
  // out of the retained region, or return NULL if it was unable to.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   242
  inline HeapWord* attempt_retained_allocation(size_t min_word_size,
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   243
                                               size_t desired_word_size,
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   244
                                               size_t* actual_word_size);
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   245
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   246
  // This specialization of release() makes sure that the retained alloc
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   247
  // region is retired and set to NULL.
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   248
  virtual HeapRegion* release();
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   249
9425445633cf 8191471: Elastic TLABs for G1
sjohanss
parents: 49392
diff changeset
   250
  virtual void init();
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   251
};
59060
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
   252
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   253
// Common base class for allocation regions used during GC.
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   254
class G1GCAllocRegion : public G1AllocRegion {
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   255
protected:
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   256
  G1EvacStats* _stats;
54843
25c329958c70 8200545: Improve filter for enqueued deferred cards
tschatzl
parents: 53244
diff changeset
   257
  G1HeapRegionAttr::region_type_t _purpose;
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   258
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   259
  virtual HeapRegion* allocate_new_region(size_t word_size, bool force);
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   260
  virtual void retire_region(HeapRegion* alloc_region, size_t allocated_bytes);
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   261
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   262
  virtual size_t retire(bool fill_up);
48402
945332d45710 8133805: Remove the bot_updates parameter from G1Allocator's allocation methods
lkorinth
parents: 47216
diff changeset
   263
59060
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
   264
  G1GCAllocRegion(const char* name, bool bot_updates, G1EvacStats* stats,
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
   265
                  G1HeapRegionAttr::region_type_t purpose, uint node_index = G1NUMA::AnyNodeIndex)
fce1fa1bdc91 8220310: Implementation: NUMA-Aware Memory Allocation for G1, Mutator (1/3)
sangheki
parents: 54843
diff changeset
   266
  : G1AllocRegion(name, bot_updates, node_index), _stats(stats), _purpose(purpose) {
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   267
    assert(stats != NULL, "Must pass non-NULL PLAB statistics");
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   268
  }
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   269
};
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   270
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   271
class SurvivorGCAllocRegion : public G1GCAllocRegion {
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   272
public:
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   273
  SurvivorGCAllocRegion(G1EvacStats* stats)
54843
25c329958c70 8200545: Improve filter for enqueued deferred cards
tschatzl
parents: 53244
diff changeset
   274
  : G1GCAllocRegion("Survivor GC Alloc Region", false /* bot_updates */, stats, G1HeapRegionAttr::Young) { }
32379
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   275
};
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   276
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   277
class OldGCAllocRegion : public G1GCAllocRegion {
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   278
public:
aa14adafaf0f 8073013: Add detailed information about PLAB memory usage
tschatzl
parents: 30764
diff changeset
   279
  OldGCAllocRegion(G1EvacStats* stats)
54843
25c329958c70 8200545: Improve filter for enqueued deferred cards
tschatzl
parents: 53244
diff changeset
   280
  : G1GCAllocRegion("Old GC Alloc Region", true /* bot_updates */, stats, G1HeapRegionAttr::Old) { }
26837
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   281
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   282
  // This specialization of release() makes sure that the last card that has
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   283
  // been allocated into has been completely filled by a dummy object.  This
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   284
  // avoids races when remembered set scanning wants to update the BOT of the
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   285
  // last card in the retained old gc alloc region, and allocation threads
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   286
  // allocating into that card at the same time.
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   287
  virtual HeapRegion* release();
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   288
};
72a43d3841e7 8057536: Refactor G1 to allow context specific allocations
sjohanss
parents: 26159
diff changeset
   289
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49945
diff changeset
   290
#endif // SHARE_GC_G1_G1ALLOCREGION_HPP