hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp
author johnc
Thu, 09 May 2013 11:16:39 -0700
changeset 17327 4bd0581aa231
parent 17323 cc153b745ed5
child 20083 df032615dd00
permissions -rw-r--r--
7176479: G1: JVM crashes on T5-8 system with 1.5 TB heap Summary: Refactor G1's hot card cache and card counts table into their own files. Simplify the card counts table, including removing the encoding of the card index in each entry. The card counts table now has a 1:1 correspondence with the cards spanned by heap. Space for the card counts table is reserved from virtual memory (rather than C heap) during JVM startup and is committed/expanded when the heap is expanded. Changes were also reviewed-by Vitaly Davidovich. Reviewed-by: tschatzl, jmasa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     1
/*
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
     2
 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     4
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     7
 * published by the Free Software Foundation.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     8
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    13
 * accompanied this code).
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    14
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
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.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    22
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    23
 */
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    25
#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    26
#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    27
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    28
class HeapRegion;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    29
class HeapRegionClosure;
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    30
class FreeRegionList;
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    31
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    32
// This class keeps track of the region metadata (i.e., HeapRegion
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    33
// instances). They are kept in the _regions array in address
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    34
// order. A region's index in the array corresponds to its index in
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    35
// the heap (i.e., 0 is the region at the bottom of the heap, 1 is
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    36
// the one after it, etc.). Two regions that are consecutive in the
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    37
// array should also be adjacent in the address space (i.e.,
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    38
// region(i).end() == region(i+1).bottom().
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    39
//
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    40
// We create a HeapRegion when we commit the region's address space
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    41
// for the first time. When we uncommit the address space of a
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    42
// region we retain the HeapRegion to be able to re-use it in the
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    43
// future (in case we recommit it).
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    44
//
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    45
// We keep track of three lengths:
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    46
//
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    47
// * _length (returned by length()) is the number of currently
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    48
//   committed regions.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    49
// * _allocated_length (not exposed outside this class) is the
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    50
//   number of regions for which we have HeapRegions.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    51
// * _max_length (returned by max_length()) is the maximum number of
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    52
//   regions the heap can have.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    53
//
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    54
// and maintain that: _length <= _allocated_length <= _max_length
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    55
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12381
diff changeset
    56
class HeapRegionSeq: public CHeapObj<mtGC> {
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 9989
diff changeset
    57
  friend class VMStructs;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    58
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    59
  // The array that holds the HeapRegions.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    60
  HeapRegion** _regions;
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    61
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    62
  // Version of _regions biased to address 0
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    63
  HeapRegion** _regions_biased;
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    64
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    65
  // The number of regions committed in the heap.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
    66
  uint _length;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    67
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    68
  // The address of the first reserved word in the heap.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    69
  HeapWord* _heap_bottom;
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    70
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    71
  // The address of the last reserved word in the heap - 1.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    72
  HeapWord* _heap_end;
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    73
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    74
  // The log of the region byte size.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
    75
  uint _region_shift;
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    76
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    77
  // A hint for which index to start searching from for humongous
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    78
  // allocations.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
    79
  uint _next_search_index;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    80
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    81
  // The number of regions for which we have allocated HeapRegions for.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
    82
  uint _allocated_length;
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    83
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    84
  // The maximum number of regions in the heap.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
    85
  uint _max_length;
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    86
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    87
  // Find a contiguous set of empty regions of length num, starting
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    88
  // from the given index.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
    89
  uint find_contiguous_from(uint from, uint num);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    90
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    91
  // Map a heap address to a biased region index. Assume that the
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    92
  // address is valid.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
    93
  inline uintx addr_to_index_biased(HeapWord* addr) const;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    94
17323
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
    95
  void increment_allocated_length() {
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
    96
    assert(_allocated_length < _max_length, "pre-condition");
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
    97
    _allocated_length++;
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    98
  }
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
    99
17323
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   100
  void increment_length() {
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   101
    assert(_length < _max_length, "pre-condition");
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   102
    _length++;
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   103
  }
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   104
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   105
  void decrement_length() {
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   106
    assert(_length > 0, "pre-condition");
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   107
    _length--;
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   108
  }
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   109
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   110
 public:
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   111
  // Empty contructor, we'll initialize it with the initialize() method.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   112
  HeapRegionSeq() { }
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   113
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
   114
  void initialize(HeapWord* bottom, HeapWord* end, uint max_length);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   115
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   116
  // Return the HeapRegion at the given index. Assume that the index
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   117
  // is valid.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
   118
  inline HeapRegion* at(uint index) const;
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   119
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   120
  // If addr is within the committed space return its corresponding
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   121
  // HeapRegion, otherwise return NULL.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   122
  inline HeapRegion* addr_to_region(HeapWord* addr) const;
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   123
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   124
  // Return the HeapRegion that corresponds to the given
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   125
  // address. Assume the address is valid.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   126
  inline HeapRegion* addr_to_region_unsafe(HeapWord* addr) const;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   127
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   128
  // Return the number of regions that have been committed in the heap.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
   129
  uint length() const { return _length; }
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   130
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   131
  // Return the maximum number of regions in the heap.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
   132
  uint max_length() const { return _max_length; }
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   133
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   134
  // Expand the sequence to reflect that the heap has grown from
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   135
  // old_end to new_end. Either create new HeapRegions, or re-use
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   136
  // existing ones, and return them in the given list. Returns the
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   137
  // memory region that covers the newly-created regions. If a
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   138
  // HeapRegion allocation fails, the result memory region might be
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   139
  // smaller than the desired one.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   140
  MemRegion expand_by(HeapWord* old_end, HeapWord* new_end,
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   141
                      FreeRegionList* list);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   142
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   143
  // Return the number of contiguous regions at the end of the sequence
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   144
  // that are available for allocation.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
   145
  uint free_suffix();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   146
8680
f1c414e16a4c 7014923: G1: code cleanup
tonyp
parents: 7923
diff changeset
   147
  // Find a contiguous set of empty regions of length num and return
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   148
  // the index of the first region or G1_NULL_HRS_INDEX if the
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   149
  // search was unsuccessful.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10663
diff changeset
   150
  uint find_contiguous(uint num);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   151
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   152
  // Apply blk->doHeapRegion() on all committed regions in address order,
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   153
  // terminating the iteration early if doHeapRegion() returns true.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   154
  void iterate(HeapRegionClosure* blk) const;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   155
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   156
  // As above, but start the iteration from hr and loop around. If hr
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   157
  // is NULL, we start from the first region in the heap.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   158
  void iterate_from(HeapRegion* hr, HeapRegionClosure* blk) const;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   159
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   160
  // Tag as uncommitted as many regions that are completely free as
17323
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   161
  // possible, up to num_regions_to_remove, from the suffix of the committed
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   162
  // sequence. Return the actual number of removed regions.
cc153b745ed5 8013872: G1: HeapRegionSeq::shrink_by() has invalid assert
brutisso
parents: 13195
diff changeset
   163
  uint shrink_by(uint num_regions_to_remove);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   164
9989
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   165
  // Do some sanity checking.
305a76435cf1 7045330: G1: Simplify/fix the HeapRegionSeq class
tonyp
parents: 8680
diff changeset
   166
  void verify_optional() PRODUCT_RETURN;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   167
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   168
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   169
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_HPP