hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
author tschatzl
Tue, 22 Apr 2014 11:10:12 +0200
changeset 24108 dfc2242fc6b0
parent 24102 5e9eb5aa4dc5
child 25889 221296ac4359
permissions -rw-r--r--
8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname) Summary: A few locations in the code use sizeof(this) which returns the size of the pointer instead of sizeof(classname) which returns the size of the sum of its members. This change fixes these errors and adds a few tests. Reviewed-by: mgerdin, brutisso
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
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
    87
  static void shrink(uint new_num_regions);
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
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   165
  // If a PRT for "hr" is in the bucket list indicated by "ind" (which must
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   166
  // be the correct index for "hr"), delete it and return true; else return
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   167
  // false.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   168
  bool del_single_region_table(size_t ind, HeapRegion* hr);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   169
13335
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   170
  // 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
   171
  void link_to_all(PerRegionTable * prt);
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   172
  // 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
   173
  void unlink_from_all(PerRegionTable * prt);
f2e823305677 7182260: G1: Fine grain RSet freeing bottleneck
johnc
parents: 13196
diff changeset
   174
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   175
public:
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   176
  OtherRegionsTable(HeapRegion* hr, Mutex* m);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   177
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   178
  HeapRegion* hr() const { return _hr; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   179
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   180
  // 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
   181
  // sense.
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   182
  void add_reference(OopOrNarrowOopStar from, int tid);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   183
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   184
  // Removes any entries shown by the given bitmaps to contain only dead
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   185
  // objects.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   186
  void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   187
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   188
  size_t occupied() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   189
  size_t occ_fine() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   190
  size_t occ_coarse() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   191
  size_t occ_sparse() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   192
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   193
  static jint n_coarsenings() { return _n_coarsenings; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   194
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   195
  // Returns size in bytes.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   196
  // Not const because it takes a lock.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   197
  size_t mem_size() const;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   198
  static size_t static_mem_size();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   199
  static size_t fl_mem_size();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   200
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   201
  bool contains_reference(OopOrNarrowOopStar from) const;
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   202
  bool contains_reference_locked(OopOrNarrowOopStar from) const;
1374
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
  void clear();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   205
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   206
  // Specifically clear the from_card_cache.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   207
  void clear_fcc();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   208
8072
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   209
  void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task);
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   210
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   211
  // Declare the heap size (in # of regions) to the OtherRegionsTable.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   212
  // (Uses it to initialize from_card_cache).
23452
d7dca4e6b95d 8035815: Cache-align and pad the from card cache
tschatzl
parents: 23451
diff changeset
   213
  static void init_from_card_cache(uint max_regions);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   214
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   215
  // Declares that only regions i s.t. 0 <= i < new_n_regs are in use.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   216
  // Make sure any entries for higher regions are invalid.
23456
9a9485a32cb3 8034868: Extract G1 From Card Cache into separate class
tschatzl
parents: 23452
diff changeset
   217
  static void shrink_from_card_cache(uint new_num_regions);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   218
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   219
  static void print_from_card_cache();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   220
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   221
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12381
diff changeset
   222
class HeapRegionRemSet : public CHeapObj<mtGC> {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   223
  friend class VMStructs;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   224
  friend class HeapRegionRemSetIterator;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   225
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   226
public:
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   227
  enum Event {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   228
    Event_EvacStart, Event_EvacEnd, Event_RSUpdateEnd
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   229
  };
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   230
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   231
private:
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   232
  G1BlockOffsetSharedArray* _bosa;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   233
  G1BlockOffsetSharedArray* bosa() const { return _bosa; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   234
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   235
  // A set of code blobs (nmethods) whose code contains pointers into
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   236
  // the region that owns this RSet.
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   237
  G1CodeRootSet _code_roots;
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   238
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   239
  Mutex _m;
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   240
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   241
  OtherRegionsTable _other_regions;
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
  enum ParIterState { Unclaimed, Claimed, Complete };
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   244
  volatile ParIterState _iter_state;
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 23456
diff changeset
   245
  volatile size_t _iter_claimed;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   246
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   247
  // Unused unless G1RecordHRRSOops is true.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   248
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   249
  static const int MaxRecorded = 1000000;
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   250
  static OopOrNarrowOopStar* _recorded_oops;
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   251
  static HeapWord**          _recorded_cards;
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   252
  static HeapRegion**        _recorded_regions;
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   253
  static int                 _n_recorded;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   254
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   255
  static const int MaxRecordedEvents = 1000;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   256
  static Event*       _recorded_events;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   257
  static int*         _recorded_event_index;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   258
  static int          _n_recorded_events;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   259
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   260
  static void print_event(outputStream* str, Event evnt);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   261
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   262
public:
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   263
  HeapRegionRemSet(G1BlockOffsetSharedArray* bosa, HeapRegion* hr);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   264
23452
d7dca4e6b95d 8035815: Cache-align and pad the from card cache
tschatzl
parents: 23451
diff changeset
   265
  static uint num_par_rem_sets();
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   266
  static void setup_remset_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   267
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   268
  HeapRegion* hr() const {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   269
    return _other_regions.hr();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   270
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
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.
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   297
  void add_reference(OopOrNarrowOopStar from, int 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
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   301
  // Removes any entries shown by the given bitmaps to contain only dead
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   302
  // objects.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   303
  void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   304
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   305
  // 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
   306
  // entries for this region in other remsets.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   307
  void clear();
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   308
  void clear_locked();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   309
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   310
  // 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
   311
  // atomic transition from Unclaimed to Claimed.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   312
  bool claim_iter();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   313
  // Sets the iteration state to "complete".
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   314
  void set_iter_complete();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   315
  // Returns "true" iff the region's iteration is complete.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   316
  bool iter_is_complete();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   317
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   318
  // 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
   319
  size_t iter_claimed() const { return _iter_claimed; }
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   320
  // Claim the next block of cards
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   321
  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
   322
    return Atomic::add(step, &_iter_claimed) - step;
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   323
  }
23523
75f522e33395 8037295: Add size_t versions of Atomic::add, dec, and inc
mgronlun
parents: 23456
diff changeset
   324
10000
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   325
  void reset_for_par_iteration();
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   326
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   327
  bool verify_ready_for_par_iteration() {
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   328
    return (_iter_state == Unclaimed) && (_iter_claimed == 0);
5bbb58b0dbb9 7046182: G1: remove unnecessary iterations over the collection set
tonyp
parents: 8072
diff changeset
   329
  }
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
   330
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   331
  // The actual # of bytes this hr_remset takes up.
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   332
  // Note also includes the strong code root set.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   333
  size_t mem_size() {
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   334
    MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   335
    return _other_regions.mem_size()
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   336
      // This correction is necessary because the above includes the second
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   337
      // part.
24108
dfc2242fc6b0 8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname)
tschatzl
parents: 24102
diff changeset
   338
      + (sizeof(HeapRegionRemSet) - sizeof(OtherRegionsTable))
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   339
      + strong_code_roots_mem_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   340
  }
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
  // Returns the memory occupancy of all static data structures associated
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   343
  // with remembered sets.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   344
  static size_t static_mem_size() {
24108
dfc2242fc6b0 8040792: G1: Memory usage calculation uses sizeof(this) instead of sizeof(classname)
tschatzl
parents: 24102
diff changeset
   345
    return OtherRegionsTable::static_mem_size() + G1CodeRootSet::free_chunks_static_mem_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   346
  }
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
  // Returns the memory occupancy of all free_list data structures associated
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   349
  // with remembered sets.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   350
  static size_t fl_mem_size() {
24099
9c132a88935d 8038930: G1CodeRootSet::test fails with assert(_num_chunks_handed_out == 0) failed: No elements must have been handed out yet
tschatzl
parents: 23523
diff changeset
   351
    return OtherRegionsTable::fl_mem_size() + G1CodeRootSet::free_chunks_mem_size();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   352
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   353
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   354
  bool contains_reference(OopOrNarrowOopStar from) const {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   355
    return _other_regions.contains_reference(from);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   356
  }
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   357
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   358
  // Routines for managing the list of code roots that point into
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   359
  // the heap region that owns this RSet.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   360
  void add_strong_code_root(nmethod* nm);
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   361
  void remove_strong_code_root(nmethod* nm);
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   362
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   363
  // During a collection, migrate the successfully evacuated strong
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   364
  // code roots that referenced into the region that owns this RSet
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   365
  // to the RSets of the new regions that they now point into.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   366
  // Unsuccessfully evacuated code roots are not migrated.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   367
  void migrate_strong_code_roots();
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   368
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   369
  // Applies blk->do_code_blob() to each of the entries in
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   370
  // the strong code roots list
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   371
  void strong_code_roots_do(CodeBlobClosure* blk) const;
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   372
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   373
  // Returns the number of elements in the strong code roots list
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   374
  size_t strong_code_roots_list_length() {
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   375
    return _code_roots.length();
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   376
  }
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   377
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   378
  // Returns true if the strong code roots contains the given
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   379
  // nmethod.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   380
  bool strong_code_roots_list_contains(nmethod* nm) {
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   381
    return _code_roots.contains(nm);
19339
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   382
  }
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   383
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   384
  // Returns the amount of memory, in bytes, currently
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   385
  // consumed by the strong code roots.
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   386
  size_t strong_code_roots_mem_size();
d247781beec7 7145569: G1: optimize nmethods scanning
johnc
parents: 17631
diff changeset
   387
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   388
  void print() PRODUCT_RETURN;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   389
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   390
  // Called during a stop-world phase to perform any deferred cleanups.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   391
  static void cleanup();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   392
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   393
  // Declare the heap size (in # of regions) to the HeapRegionRemSet(s).
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   394
  // (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
   395
  static void init_heap(uint max_regions) {
23452
d7dca4e6b95d 8035815: Cache-align and pad the from card cache
tschatzl
parents: 23451
diff changeset
   396
    OtherRegionsTable::init_from_card_cache(max_regions);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   397
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   398
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   399
  // Declares that only regions i s.t. 0 <= i < new_n_regs are in use.
12381
1438e0fbfa27 7157073: G1: type change size_t -> uint for region counts / indexes
tonyp
parents: 10677
diff changeset
   400
  static void shrink_heap(uint new_n_regs) {
23452
d7dca4e6b95d 8035815: Cache-align and pad the from card cache
tschatzl
parents: 23451
diff changeset
   401
    OtherRegionsTable::shrink_from_card_cache(new_n_regs);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   402
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   403
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   404
#ifndef PRODUCT
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   405
  static void print_from_card_cache() {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   406
    OtherRegionsTable::print_from_card_cache();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   407
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   408
#endif
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   409
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 2881
diff changeset
   410
  static void record(HeapRegion* hr, OopOrNarrowOopStar f);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   411
  static void print_recorded();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   412
  static void record_event(Event evnt);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   413
8072
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   414
  // These are wrappers for the similarly-named methods on
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   415
  // SparsePRT. Look at sparsePRT.hpp for more details.
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   416
  static void reset_for_cleanup_tasks();
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   417
  void do_cleanup_work(HRRSCleanupTask* hrrs_cleanup_task);
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   418
  static void finish_cleanup_task(HRRSCleanupTask* hrrs_cleanup_task);
f223f43cd62f 7014261: G1: RSet-related failures
tonyp
parents: 7397
diff changeset
   419
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   420
  // Run unit tests.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   421
#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
   422
  static void test_prt();
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   423
  static void test();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   424
#endif
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   425
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   426
17108
cf72dcf9a8f2 8011724: G1: Stack allocate instances of HeapRegionRemSetIterator
johnc
parents: 13335
diff changeset
   427
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
   428
 private:
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   429
  // The region RSet over which we are iterating.
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   430
  HeapRegionRemSet* _hrrs;
1374
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
  // Local caching of HRRS fields.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   433
  const BitMap*             _coarse_map;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   434
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   435
  G1BlockOffsetSharedArray* _bosa;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   436
  G1CollectedHeap*          _g1h;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   437
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   438
  // The number of cards yielded since initialization.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   439
  size_t _n_yielded_fine;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   440
  size_t _n_yielded_coarse;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   441
  size_t _n_yielded_sparse;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   442
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   443
  // 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
   444
  // 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
   445
  // table, and then finish with the coarse table.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   446
  enum IterState {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   447
    Sparse,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   448
    Fine,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   449
    Coarse
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   450
  };
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   451
  IterState _is;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   452
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   453
  // 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
   454
  // 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
   455
  size_t _cur_region_card_offset;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   456
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   457
  // 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
   458
  int    _coarse_cur_region_index;
370a8da2d63f 7095194: G1: HeapRegion::GrainBytes, GrainWords, and CardsPerRegion should be size_t
johnc
parents: 10000
diff changeset
   459
  size_t _coarse_cur_region_cur_card;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   460
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   461
  bool coarse_has_next(size_t& card_index);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   462
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   463
  // 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
   464
  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
   465
  // 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
   466
  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
   467
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   468
  // 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
   469
  void switch_to_prt(PerRegionTable* prt);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   470
  bool fine_has_next();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   471
  bool fine_has_next(size_t& card_index);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   472
24101
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   473
  // 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
   474
  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
   475
bd1a2ee20760 8037344: Use the "next" field to iterate over fine remembered instead of using the hash table
tschatzl
parents: 24099
diff changeset
   476
 public:
23451
ed2b8bb28fed 8035406: Improve data structure for Code Cache remembered sets
tschatzl
parents: 22234
diff changeset
   477
  HeapRegionRemSetIterator(HeapRegionRemSet* hrrs);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   478
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   479
  // 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
   480
  // 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
   481
  // yielded.)   Otherwise, returns false (and leaves "card_index"
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   482
  // undefined.)
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   483
  bool has_next(size_t& card_index);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   484
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   485
  size_t n_yielded_fine() { return _n_yielded_fine; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   486
  size_t n_yielded_coarse() { return _n_yielded_coarse; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   487
  size_t n_yielded_sparse() { return _n_yielded_sparse; }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   488
  size_t n_yielded() {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   489
    return n_yielded_fine() + n_yielded_coarse() + n_yielded_sparse();
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   490
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   491
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   492
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   493
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP