hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
author tschatzl
Wed, 07 Jan 2015 15:15:37 +0100
changeset 28379 e6784fc8fff2
parent 28030 c36c6703366d
permissions -rw-r--r--
8048179: Early reclaim of large objects that are referenced by a few objects Summary: Push the remembered sets of large objects with few referenced into the dirty card queue at the beginning of the evacuation so that they may end up with zero remembered set entries at the end of the collection, and are potentially reclaimed. Also improve timing measurements of the early reclaim mechanism, and shorten flag names. Reviewed-by: brutisso, jmasa, dfazunen
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
/*
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
     2
 * Copyright (c) 2001, 2014, 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: 5346
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5346
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: 5346
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_HEAPREGIONREMSET_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    26
#define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    27
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
    28
#include "gc_implementation/g1/g1CodeCacheRemSet.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    29
#include "gc_implementation/g1/sparsePRT.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    30
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    31
// Remembered set for a heap region.  Represent a set of "cards" that
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    32
// contain pointers into the owner heap region.  Cards are defined somewhat
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    33
// abstractly, in terms of what the "BlockOffsetTable" in use can parse.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    34
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    35
class G1CollectedHeap;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    36
class G1BlockOffsetSharedArray;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    37
class HeapRegion;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    38
class HeapRegionRemSetIterator;
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
    39
class PerRegionTable;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    40
class SparsePRT;
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
    41
class nmethod;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    42
8072
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
    43
// Essentially a wrapper around SparsePRTCleanupTask. See
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
    44
// sparsePRT.hpp for more details.
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
    45
class HRRSCleanupTask : public SparsePRTCleanupTask {
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
    46
};
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    47
23456
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    48
// The FromCardCache remembers the most recently processed card on the heap on
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    49
// a per-region and per-thread basis.
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    50
class FromCardCache : public AllStatic {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    51
 private:
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    52
  // Array of card indices. Indexed by thread X and heap region to minimize
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    53
  // thread contention.
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    54
  static int** _cache;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    55
  static uint _max_regions;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    56
  static size_t _static_mem_size;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    57
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    58
 public:
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    59
  enum {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    60
    InvalidCard = -1 // Card value of an invalid card, i.e. a card index not otherwise used.
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    61
  };
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    62
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    63
  static void clear(uint region_idx);
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    64
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    65
  // Returns true if the given card is in the cache at the given location, or
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    66
  // replaces the card at that location and returns false.
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    67
  static bool contains_or_replace(uint worker_id, uint region_idx, int card) {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    68
    int card_in_cache = at(worker_id, region_idx);
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    69
    if (card_in_cache == card) {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    70
      return true;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    71
    } else {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    72
      set(worker_id, region_idx, card);
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    73
      return false;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    74
    }
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    75
  }
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    76
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    77
  static int at(uint worker_id, uint region_idx) {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    78
    return _cache[worker_id][region_idx];
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    79
  }
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    80
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    81
  static void set(uint worker_id, uint region_idx, int val) {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    82
    _cache[worker_id][region_idx] = val;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    83
  }
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    84
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    85
  static void initialize(uint n_par_rs, uint max_num_regions);
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    86
26160
aba6b01cb988 8038423: G1: Decommit memory within heap
tschatzl
parents: 25889
diff changeset
    87
  static void invalidate(uint start_idx, size_t num_regions);
23456
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    88
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    89
  static void print(outputStream* out = gclog_or_tty) PRODUCT_RETURN;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    90
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    91
  static size_t static_mem_size() {
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    92
    return _static_mem_size;
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    93
  }
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    94
};
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    95
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    96
// The "_coarse_map" is a bitmap with one bit for each region, where set
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    97
// bits indicate that the corresponding region may contain some pointer
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    98
// into the owning region.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    99
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   100
// The "_fine_grain_entries" array is an open hash table of PerRegionTables
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   101
// (PRTs), indicating regions for which we're keeping the RS as a set of
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   102
// cards.  The strategy is to cap the size of the fine-grain table,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   103
// deleting an entry and setting the corresponding coarse-grained bit when
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   104
// we would overflow this cap.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   105
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   106
// We use a mixture of locking and lock-free techniques here.  We allow
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   107
// threads to locate PRTs without locking, but threads attempting to alter
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   108
// a bucket list obtain a lock.  This means that any failing attempt to
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   109
// find a PRT must be retried with the lock.  It might seem dangerous that
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   110
// a read can find a PRT that is concurrently deleted.  This is all right,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   111
// because:
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   112
//
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   113
//   1) We only actually free PRT's at safe points (though we reuse them at
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   114
//      other times).
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   115
//   2) We find PRT's in an attempt to add entries.  If a PRT is deleted,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   116
//      it's _coarse_map bit is set, so the that we were attempting to add
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   117
//      is represented.  If a deleted PRT is re-used, a thread adding a bit,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   118
//      thinking the PRT is for a different region, does no harm.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   119
2013
49e915da0905 6700941: G1: allocation spec missing for some G1 classes
apetrusenko
parents: 1374
diff changeset
   120
class OtherRegionsTable VALUE_OBJ_CLASS_SPEC {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   121
  friend class HeapRegionRemSetIterator;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   122
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   123
  G1CollectedHeap* _g1h;
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   124
  Mutex*           _m;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   125
  HeapRegion*      _hr;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   126
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   127
  // These are protected by "_m".
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   128
  BitMap      _coarse_map;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   129
  size_t      _n_coarse_entries;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   130
  static jint _n_coarsenings;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   131
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   132
  PerRegionTable** _fine_grain_regions;
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   133
  size_t           _n_fine_entries;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   134
13335
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   135
  // The fine grain remembered sets are doubly linked together using
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   136
  // their 'next' and 'prev' fields.
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   137
  // This allows fast bulk freeing of all the fine grain remembered
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   138
  // set entries, and fast finding of all of them without iterating
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   139
  // over the _fine_grain_regions table.
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   140
  PerRegionTable * _first_all_fine_prts;
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   141
  PerRegionTable * _last_all_fine_prts;
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   142
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   143
  // Used to sample a subset of the fine grain PRTs to determine which
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   144
  // PRT to evict and coarsen.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   145
  size_t        _fine_eviction_start;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   146
  static size_t _fine_eviction_stride;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   147
  static size_t _fine_eviction_sample_size;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   148
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   149
  SparsePRT   _sparse_table;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   150
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   151
  // These are static after init.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   152
  static size_t _max_fine_entries;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   153
  static size_t _mod_max_fine_entries_mask;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   154
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   155
  // Requires "prt" to be the first element of the bucket list appropriate
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   156
  // for "hr".  If this list contains an entry for "hr", return it,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   157
  // otherwise return "NULL".
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   158
  PerRegionTable* find_region_table(size_t ind, HeapRegion* hr) const;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   159
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   160
  // Find, delete, and return a candidate PerRegionTable, if any exists,
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   161
  // adding the deleted region to the coarse bitmap.  Requires the caller
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   162
  // to hold _m, and the fine-grain table to be full.
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   163
  PerRegionTable* delete_region_table();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   164
13335
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   165
  // link/add the given fine grain remembered set into the "all" list
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   166
  void link_to_all(PerRegionTable * prt);
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   167
  // unlink/remove the given fine grain remembered set into the "all" list
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   168
  void unlink_from_all(PerRegionTable * prt);
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   169
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   170
  bool contains_reference_locked(OopOrNarrowOopStar from) const;
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   171
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   172
  // Clear the from_card_cache entries for this region.
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   173
  void clear_fcc();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   174
public:
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   175
  // Create a new remembered set for the given heap region. The given mutex should
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   176
  // be used to ensure consistency.
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   177
  OtherRegionsTable(HeapRegion* hr, Mutex* m);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   178
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   179
  // For now.  Could "expand" some tables in the future, so that this made
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   180
  // sense.
26850
515ff48cf5f0 8036116: Fix thread-id types in G1 remembered set implementations
brutisso
parents: 26422
diff changeset
   181
  void add_reference(OopOrNarrowOopStar from, uint tid);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   182
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   183
  // Returns whether the remembered set contains the given reference.
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   184
  bool contains_reference(OopOrNarrowOopStar from) const;
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   185
28379
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   186
  // Returns whether this remembered set (and all sub-sets) have an occupancy
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   187
  // that is less or equal than the given occupancy.
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   188
  bool occupancy_less_or_equal_than(size_t limit) const;
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   189
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   190
  // Removes any entries shown by the given bitmaps to contain only dead
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   191
  // objects. Not thread safe.
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   192
  // Set bits in the bitmaps indicate that the given region or card is live.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   193
  void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   194
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   195
  // Returns whether this remembered set (and all sub-sets) does not contain any entry.
25889
221296ac4359 8027959: Early reclamation of large objects in G1
tschatzl
parents: 24108
diff changeset
   196
  bool is_empty() const;
221296ac4359 8027959: Early reclamation of large objects in G1
tschatzl
parents: 24108
diff changeset
   197
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   198
  // Returns the number of cards contained in this remembered set.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   199
  size_t occupied() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   200
  size_t occ_fine() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   201
  size_t occ_coarse() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   202
  size_t occ_sparse() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   203
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   204
  static jint n_coarsenings() { return _n_coarsenings; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   205
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   206
  // Returns size of the actual remembered set containers in bytes.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   207
  size_t mem_size() const;
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   208
  // Returns the size of static data in bytes.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   209
  static size_t static_mem_size();
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   210
  // Returns the size of the free list content in bytes.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   211
  static size_t fl_mem_size();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   212
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   213
  // Clear the entire contents of this remembered set.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   214
  void clear();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   215
8072
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   216
  void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   217
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   218
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12381
diff changeset
   219
class HeapRegionRemSet : public CHeapObj<mtGC> {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   220
  friend class VMStructs;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   221
  friend class HeapRegionRemSetIterator;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   222
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   223
public:
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   224
  enum Event {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   225
    Event_EvacStart, Event_EvacEnd, Event_RSUpdateEnd
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   226
  };
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   227
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   228
private:
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   229
  G1BlockOffsetSharedArray* _bosa;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   230
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   231
  // A set of code blobs (nmethods) whose code contains pointers into
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   232
  // the region that owns this RSet.
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   233
  G1CodeRootSet _code_roots;
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   234
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   235
  Mutex _m;
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   236
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   237
  OtherRegionsTable _other_regions;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   238
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   239
  enum ParIterState { Unclaimed, Claimed, Complete };
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   240
  volatile ParIterState _iter_state;
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 23456
diff changeset
   241
  volatile size_t _iter_claimed;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   242
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   243
  // Unused unless G1RecordHRRSOops is true.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   244
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   245
  static const int MaxRecorded = 1000000;
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   246
  static OopOrNarrowOopStar* _recorded_oops;
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   247
  static HeapWord**          _recorded_cards;
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   248
  static HeapRegion**        _recorded_regions;
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   249
  static int                 _n_recorded;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   250
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   251
  static const int MaxRecordedEvents = 1000;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   252
  static Event*       _recorded_events;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   253
  static int*         _recorded_event_index;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   254
  static int          _n_recorded_events;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   255
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   256
  static void print_event(outputStream* str, Event evnt);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   257
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   258
public:
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   259
  HeapRegionRemSet(G1BlockOffsetSharedArray* bosa, HeapRegion* hr);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   260
23452
d7dca4e6b95d 8035815: Cache-align and pad the from card cache
tschatzl
parents: 23451
diff changeset
   261
  static uint num_par_rem_sets();
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   262
  static void setup_remset_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   263
25889
221296ac4359 8027959: Early reclamation of large objects in G1
tschatzl
parents: 24108
diff changeset
   264
  bool is_empty() const {
221296ac4359 8027959: Early reclamation of large objects in G1
tschatzl
parents: 24108
diff changeset
   265
    return (strong_code_roots_list_length() == 0) && _other_regions.is_empty();
221296ac4359 8027959: Early reclamation of large objects in G1
tschatzl
parents: 24108
diff changeset
   266
  }
221296ac4359 8027959: Early reclamation of large objects in G1
tschatzl
parents: 24108
diff changeset
   267
28379
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   268
  bool occupancy_less_or_equal_than(size_t occ) const {
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   269
    return (strong_code_roots_list_length() == 0) && _other_regions.occupancy_less_or_equal_than(occ);
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   270
  }
e6784fc8fff2 8048179: Early reclaim of large objects that are referenced by a few objects
tschatzl
parents: 28030
diff changeset
   271
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   272
  size_t occupied() {
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   273
    MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag);
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   274
    return occupied_locked();
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   275
  }
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   276
  size_t occupied_locked() {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   277
    return _other_regions.occupied();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   278
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   279
  size_t occ_fine() const {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   280
    return _other_regions.occ_fine();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   281
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   282
  size_t occ_coarse() const {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   283
    return _other_regions.occ_coarse();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   284
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   285
  size_t occ_sparse() const {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   286
    return _other_regions.occ_sparse();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   287
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   288
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   289
  static jint n_coarsenings() { return OtherRegionsTable::n_coarsenings(); }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   290
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   291
  // Used in the sequential case.
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   292
  void add_reference(OopOrNarrowOopStar from) {
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   293
    _other_regions.add_reference(from, 0);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   294
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   295
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   296
  // Used in the parallel case.
26850
515ff48cf5f0 8036116: Fix thread-id types in G1 remembered set implementations
brutisso
parents: 26422
diff changeset
   297
  void add_reference(OopOrNarrowOopStar from, uint tid) {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   298
    _other_regions.add_reference(from, tid);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   299
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   300
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   301
  // Removes any entries in the remembered set shown by the given bitmaps to
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   302
  // contain only dead objects. Not thread safe.
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   303
  // One bits in the bitmaps indicate that the given region or card is live.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   304
  void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   305
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   306
  // The region is being reclaimed; clear its remset, and any mention of
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   307
  // entries for this region in other remsets.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   308
  void clear();
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   309
  void clear_locked();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   310
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   311
  // Attempt to claim the region.  Returns true iff this call caused an
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   312
  // atomic transition from Unclaimed to Claimed.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   313
  bool claim_iter();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   314
  // Sets the iteration state to "complete".
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   315
  void set_iter_complete();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   316
  // Returns "true" iff the region's iteration is complete.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   317
  bool iter_is_complete();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   318
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   319
  // Support for claiming blocks of cards during iteration
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 23456
diff changeset
   320
  size_t iter_claimed() const { return _iter_claimed; }
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   321
  // Claim the next block of cards
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   322
  size_t iter_claimed_next(size_t step) {
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 23456
diff changeset
   323
    return Atomic::add(step, &_iter_claimed) - step;
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   324
  }
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 23456
diff changeset
   325
10000
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   326
  void reset_for_par_iteration();
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   327
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   328
  bool verify_ready_for_par_iteration() {
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   329
    return (_iter_state == Unclaimed) && (_iter_claimed == 0);
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   330
  }
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   331
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   332
  // The actual # of bytes this hr_remset takes up.
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   333
  // Note also includes the strong code root set.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   334
  size_t mem_size() {
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   335
    MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   336
    return _other_regions.mem_size()
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   337
      // This correction is necessary because the above includes the second
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   338
      // part.
24108
dfc2242fc6b0 8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname)
tschatzl
parents: 24102
diff changeset
   339
      + (sizeof(HeapRegionRemSet) - sizeof(OtherRegionsTable))
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   340
      + strong_code_roots_mem_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   341
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   342
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   343
  // Returns the memory occupancy of all static data structures associated
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   344
  // with remembered sets.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   345
  static size_t static_mem_size() {
26422
4ee5901e205e 8048268: G1 Code Root Migration performs poorly
mgerdin
parents: 26160
diff changeset
   346
    return OtherRegionsTable::static_mem_size() + G1CodeRootSet::static_mem_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   347
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   348
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   349
  // Returns the memory occupancy of all free_list data structures associated
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   350
  // with remembered sets.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   351
  static size_t fl_mem_size() {
26422
4ee5901e205e 8048268: G1 Code Root Migration performs poorly
mgerdin
parents: 26160
diff changeset
   352
    return OtherRegionsTable::fl_mem_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   353
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   354
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   355
  bool contains_reference(OopOrNarrowOopStar from) const {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   356
    return _other_regions.contains_reference(from);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   357
  }
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   358
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   359
  // Routines for managing the list of code roots that point into
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   360
  // the heap region that owns this RSet.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   361
  void add_strong_code_root(nmethod* nm);
26422
4ee5901e205e 8048268: G1 Code Root Migration performs poorly
mgerdin
parents: 26160
diff changeset
   362
  void add_strong_code_root_locked(nmethod* nm);
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   363
  void remove_strong_code_root(nmethod* nm);
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   364
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   365
  // Applies blk->do_code_blob() to each of the entries in
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   366
  // the strong code roots list
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   367
  void strong_code_roots_do(CodeBlobClosure* blk) const;
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   368
26422
4ee5901e205e 8048268: G1 Code Root Migration performs poorly
mgerdin
parents: 26160
diff changeset
   369
  void clean_strong_code_roots(HeapRegion* hr);
4ee5901e205e 8048268: G1 Code Root Migration performs poorly
mgerdin
parents: 26160
diff changeset
   370
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   371
  // Returns the number of elements in the strong code roots list
25889
221296ac4359 8027959: Early reclamation of large objects in G1
tschatzl
parents: 24108
diff changeset
   372
  size_t strong_code_roots_list_length() const {
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   373
    return _code_roots.length();
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   374
  }
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   375
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   376
  // Returns true if the strong code roots contains the given
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   377
  // nmethod.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   378
  bool strong_code_roots_list_contains(nmethod* nm) {
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   379
    return _code_roots.contains(nm);
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   380
  }
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   381
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   382
  // Returns the amount of memory, in bytes, currently
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   383
  // consumed by the strong code roots.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   384
  size_t strong_code_roots_mem_size();
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   385
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   386
  void print() PRODUCT_RETURN;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   387
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   388
  // Called during a stop-world phase to perform any deferred cleanups.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   389
  static void cleanup();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   390
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   391
  // Declare the heap size (in # of regions) to the HeapRegionRemSet(s).
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   392
  // (Uses it to initialize from_card_cache).
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10677
diff changeset
   393
  static void init_heap(uint max_regions) {
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   394
    FromCardCache::initialize(num_par_rem_sets(), max_regions);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   395
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   396
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   397
  static void invalidate_from_card_cache(uint start_idx, size_t num_regions) {
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   398
    FromCardCache::invalidate(start_idx, num_regions);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   399
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   400
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   401
#ifndef PRODUCT
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   402
  static void print_from_card_cache() {
28030
c36c6703366d 8066102: Clean up HeapRegionRemSet files
tschatzl
parents: 26850
diff changeset
   403
    FromCardCache::print();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   404
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   405
#endif
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   406
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   407
  static void record(HeapRegion* hr, OopOrNarrowOopStar f);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   408
  static void print_recorded();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   409
  static void record_event(Event evnt);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   410
8072
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   411
  // These are wrappers for the similarly-named methods on
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   412
  // SparsePRT. Look at sparsePRT.hpp for more details.
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   413
  static void reset_for_cleanup_tasks();
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   414
  void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task);
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   415
  static void finish_cleanup_task(HRRSCleanupTask* hrrs_cleanup_task);
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   416
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   417
  // Run unit tests.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   418
#ifndef PRODUCT
17631
17992863b0ab 8014405: G1: PerRegionTable::fl_mem_size() calculates size of the free list using wrong element sizes
tschatzl
parents: 17108
diff changeset
   419
  static void test_prt();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   420
  static void test();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   421
#endif
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   422
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   423
17108
cf72dcf9a8f2 8011724: G1: Stack allocate instances of HeapRegionRemSetIterator
johnc
parents: 13335
diff changeset
   424
class HeapRegionRemSetIterator : public StackObj {
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   425
 private:
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   426
  // The region RSet over which we are iterating.
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   427
  HeapRegionRemSet* _hrrs;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   428
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   429
  // Local caching of HRRS fields.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   430
  const BitMap*             _coarse_map;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   431
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   432
  G1BlockOffsetSharedArray* _bosa;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   433
  G1CollectedHeap*          _g1h;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   434
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   435
  // The number of cards yielded since initialization.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   436
  size_t _n_yielded_fine;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   437
  size_t _n_yielded_coarse;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   438
  size_t _n_yielded_sparse;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   439
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   440
  // Indicates what granularity of table that we are currently iterating over.
17108
cf72dcf9a8f2 8011724: G1: Stack allocate instances of HeapRegionRemSetIterator
johnc
parents: 13335
diff changeset
   441
  // We start iterating over the sparse table, progress to the fine grain
cf72dcf9a8f2 8011724: G1: Stack allocate instances of HeapRegionRemSetIterator
johnc
parents: 13335
diff changeset
   442
  // table, and then finish with the coarse table.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   443
  enum IterState {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   444
    Sparse,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   445
    Fine,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   446
    Coarse
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   447
  };
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   448
  IterState _is;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   449
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   450
  // For both Coarse and Fine remembered set iteration this contains the
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   451
  // first card number of the heap region we currently iterate over.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   452
  size_t _cur_region_card_offset;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   453
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   454
  // Current region index for the Coarse remembered set iteration.
10677
370a8da2d63f 7095194: G1: HeapRegion::GrainBytes, GrainWords, and CardsPerRegion should be size_t
johnc
parents: 10000
diff changeset
   455
  int    _coarse_cur_region_index;
370a8da2d63f 7095194: G1: HeapRegion::GrainBytes, GrainWords, and CardsPerRegion should be size_t
johnc
parents: 10000
diff changeset
   456
  size_t _coarse_cur_region_cur_card;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   457
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   458
  bool coarse_has_next(size_t& card_index);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   459
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   460
  // The PRT we are currently iterating over.
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   461
  PerRegionTable* _fine_cur_prt;
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   462
  // Card offset within the current PRT.
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   463
  size_t _cur_card_in_prt;
13113
ab3870a79b18 6921087: G1: remove per-GC-thread expansion tables from the fine-grain remembered sets
johnc
parents: 12381
diff changeset
   464
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   465
  // Update internal variables when switching to the given PRT.
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   466
  void switch_to_prt(PerRegionTable* prt);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   467
  bool fine_has_next();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   468
  bool fine_has_next(size_t& card_index);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   469
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   470
  // The Sparse remembered set iterator.
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   471
  SparsePRTIter _sparse_iter;
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   472
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   473
 public:
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   474
  HeapRegionRemSetIterator(HeapRegionRemSet* hrrs);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   475
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   476
  // If there remains one or more cards to be yielded, returns true and
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   477
  // sets "card_index" to one of those cards (which is then considered
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   478
  // yielded.)   Otherwise, returns false (and leaves "card_index"
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   479
  // undefined.)
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   480
  bool has_next(size_t& card_index);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   481
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   482
  size_t n_yielded_fine() { return _n_yielded_fine; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   483
  size_t n_yielded_coarse() { return _n_yielded_coarse; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   484
  size_t n_yielded_sparse() { return _n_yielded_sparse; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   485
  size_t n_yielded() {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   486
    return n_yielded_fine() + n_yielded_coarse() + n_yielded_sparse();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   487
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   488
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   489
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   490
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP