src/hotspot/share/gc/g1/g1OopClosures.inline.hpp
author tschatzl
Mon, 26 Mar 2018 16:51:43 +0200
changeset 49607 acffe6ff3ae7
parent 49606 9ae8719efcae
child 49722 a47d1e21b3f1
permissions -rw-r--r--
8180415: Rebuild remembered sets during the concurrent cycle Summary: In general maintain remembered sets of old regions only from the start of the concurrent cycle to the mixed gc they are used, at most until the end of the mixed phase. Reviewed-by: sjohanss, sangheki
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
/*
49606
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
     2
 * Copyright (c) 2001, 2018, 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: 4902
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4902
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: 4902
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
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
    25
#ifndef SHARE_VM_GC_G1_G1OOPCLOSURES_INLINE_HPP
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
    26
#define SHARE_VM_GC_G1_G1OOPCLOSURES_INLINE_HPP
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6247
diff changeset
    27
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
    28
#include "gc/g1/g1CollectedHeap.hpp"
35943
e726308008c0 8148973: Rename g1/concurrentMark.{hpp,cpp,inline.hpp} to g1/g1ConcurrentMark.{hpp,cpp,inline.hpp}
ehelin
parents: 35862
diff changeset
    29
#include "gc/g1/g1ConcurrentMark.inline.hpp"
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
    30
#include "gc/g1/g1OopClosures.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
    31
#include "gc/g1/g1ParScanThreadState.inline.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
    32
#include "gc/g1/g1RemSet.hpp"
32185
49a57ff2c3cb 8073052: Rename and clean up the allocation manager hierarchy in g1Allocator.?pp
tschatzl
parents: 31592
diff changeset
    33
#include "gc/g1/heapRegion.inline.hpp"
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
    34
#include "gc/g1/heapRegionRemSet.hpp"
25492
d27050bdfb04 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 25491
diff changeset
    35
#include "memory/iterator.inline.hpp"
48633
2569f227ae8e 8129440: G1 crash during concurrent root region scan
tschatzl
parents: 47885
diff changeset
    36
#include "oops/access.inline.hpp"
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    37
#include "oops/compressedOops.inline.hpp"
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    38
#include "oops/oopsHierarchy.hpp"
24487
71ff0bd674eb 8042737: Introduce umbrella header prefetch.inline.hpp
goetz
parents: 24424
diff changeset
    39
#include "runtime/prefetch.inline.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6247
diff changeset
    40
11584
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
    41
template <class T>
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    42
inline void G1ScanClosureBase::prefetch_and_push(T* p, const oop obj) {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    43
  // We're not going to even bother checking whether the object is
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    44
  // already forwarded or not, as this usually causes an immediate
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    45
  // stall. We'll try to prefetch the object (for write, given that
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    46
  // we might need to install the forwarding reference) and we'll
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    47
  // get back to it when pop it from the queue
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    48
  Prefetch::write(obj->mark_addr(), 0);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    49
  Prefetch::read(obj->mark_addr(), (HeapWordSize*2));
3262
30d1c247fc25 6700789: G1: Enable use of compressed oops with G1 heaps
ysr
parents: 1374
diff changeset
    50
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    51
  // slightly paranoid test; I'm trying to catch potential
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    52
  // problems before we go into push_on_queue to know where the
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    53
  // problem is coming from
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    54
  assert((obj == RawAccess<>::oop_load(p)) ||
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    55
         (obj->is_forwarded() &&
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    56
         obj->forwardee() == RawAccess<>::oop_load(p)),
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    57
         "p should still be pointing to obj or to its forwardee");
11202
6be05533238b 7114095: G1: assert(obj == oopDesc::load_decode_heap_oop(p)) failed: p should still be pointing to obj
johnc
parents: 9994
diff changeset
    58
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    59
  _par_scan_state->push_on_queue(p);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    60
}
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    61
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    62
template <class T>
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    63
inline void G1ScanClosureBase::handle_non_cset_obj_common(InCSetState const state, T* p, oop const obj) {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    64
  if (state.is_humongous()) {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    65
    _g1->set_humongous_is_live(obj);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    66
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    67
}
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
    68
11584
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
    69
template <class T>
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    70
inline void G1ScanEvacuatedObjClosure::do_oop_nv(T* p) {
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    71
  T heap_oop = RawAccess<>::oop_load(p);
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
    72
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    73
  if (CompressedOops::is_null(heap_oop)) {
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    74
    return;
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    75
  }
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    76
  oop obj = CompressedOops::decode_not_null(heap_oop);
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    77
  const InCSetState state = _g1->in_cset_state(obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    78
  if (state.is_in_cset()) {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    79
    prefetch_and_push(p, obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    80
  } else {
46646
5165b3a5b44a 8183397: Ensure consistent closure filtering during evacuation
tschatzl
parents: 46572
diff changeset
    81
    if (HeapRegion::is_in_same_region(p, obj)) {
5165b3a5b44a 8183397: Ensure consistent closure filtering during evacuation
tschatzl
parents: 46572
diff changeset
    82
      return;
5165b3a5b44a 8183397: Ensure consistent closure filtering during evacuation
tschatzl
parents: 46572
diff changeset
    83
    }
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    84
    handle_non_cset_obj_common(state, p, obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
    85
    _par_scan_state->update_rs(_from, p, obj);
4902
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
    86
  }
991aaddb5165 6923991: G1: improve scalability of RSet scanning
iveresov
parents: 3262
diff changeset
    87
}
6247
00e5cc407d03 6814437: G1: remove the _new_refs array
johnc
parents: 5547
diff changeset
    88
11584
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
    89
template <class T>
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
    90
inline void G1CMOopClosure::do_oop_nv(T* p) {
49606
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
    91
  _task->deal_with_reference(p);
9994
efb74fdbd46e 7046558: G1: concurrent marking optimizations
tonyp
parents: 9988
diff changeset
    92
}
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6247
diff changeset
    93
11584
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
    94
template <class T>
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
    95
inline void G1RootRegionScanClosure::do_oop_nv(T* p) {
48633
2569f227ae8e 8129440: G1 crash during concurrent root region scan
tschatzl
parents: 47885
diff changeset
    96
  T heap_oop = RawAccess<MO_VOLATILE>::oop_load(p);
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
    97
  if (CompressedOops::is_null(heap_oop)) {
46752
a2b799e3f0be 8184348: Merge G1ConcurrentMark::par_mark() and G1ConcurrentMark::grayRoot()
tschatzl
parents: 46670
diff changeset
    98
    return;
11584
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
    99
  }
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   100
  oop obj = CompressedOops::decode_not_null(heap_oop);
49606
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   101
  _cm->mark_in_next_bitmap(_worker_id, obj);
11584
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
   102
}
e1df4d08a1f4 7127706: G1: re-enable survivors during the initial-mark pause
tonyp
parents: 11202
diff changeset
   103
11586
ccc217c177ee 7133038: G1: Some small profile based optimizations
johnc
parents: 11584
diff changeset
   104
template <class T>
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   105
inline static void check_obj_during_refinement(T* p, oop const obj) {
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   106
#ifdef ASSERT
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   107
  G1CollectedHeap* g1 = G1CollectedHeap::heap();
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   108
  // can't do because of races
46968
9119841280f4 8160399: is_oop_or_null involves undefined behavior
coleenp
parents: 46752
diff changeset
   109
  // assert(oopDesc::is_oop_or_null(obj), "expected an oop");
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   110
  assert(check_obj_alignment(obj), "not oop aligned");
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   111
  assert(g1->is_in_reserved(obj), "must be in heap");
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   112
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   113
  HeapRegion* from = g1->heap_region_containing(p);
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   114
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   115
  assert(from != NULL, "from region must be non-NULL");
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   116
  assert(from->is_in_reserved(p) ||
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   117
         (from->is_humongous() &&
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   118
          g1->heap_region_containing(p)->is_humongous() &&
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   119
          from->humongous_start_region() == g1->heap_region_containing(p)->humongous_start_region()),
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   120
         "p " PTR_FORMAT " is not in the same region %u or part of the correct humongous object starting at region %u.",
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   121
         p2i(p), from->hrm_index(), from->humongous_start_region()->hrm_index());
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   122
#endif // ASSERT
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   123
}
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   124
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   125
template <class T>
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   126
inline void G1ConcurrentRefineOopClosure::do_oop_nv(T* p) {
48633
2569f227ae8e 8129440: G1 crash during concurrent root region scan
tschatzl
parents: 47885
diff changeset
   127
  T o = RawAccess<MO_VOLATILE>::oop_load(p);
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   128
  if (CompressedOops::is_null(o)) {
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   129
    return;
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   130
  }
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   131
  oop obj = CompressedOops::decode_not_null(o);
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   132
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   133
  check_obj_during_refinement(p, obj);
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   134
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   135
  if (HeapRegion::is_in_same_region(p, obj)) {
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   136
    // Normally this closure should only be called with cross-region references.
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   137
    // But since Java threads are manipulating the references concurrently and we
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   138
    // reload the values things may have changed.
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   139
    // Also this check lets slip through references from a humongous continues region
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   140
    // to its humongous start region, as they are in different regions, and adds a
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   141
    // remembered set entry. This is benign (apart from memory usage), as we never
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   142
    // try to either evacuate or eager reclaim humonguous arrays of j.l.O.
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   143
    return;
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   144
  }
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   145
49607
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   146
  HeapRegionRemSet* to_rem_set = _g1->heap_region_containing(obj)->rem_set();
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   147
49607
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   148
  assert(to_rem_set != NULL, "Need per-region 'into' remsets.");
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   149
  if (to_rem_set->is_tracked()) {
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   150
    to_rem_set->add_reference(p, _worker_i);
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   151
  }
46519
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   152
}
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   153
40c9c132f961 8177707: Specialize G1RemSet::refine_card for concurrent/during safepoint refinement
tschatzl
parents: 46307
diff changeset
   154
template <class T>
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   155
inline void G1ScanObjsDuringUpdateRSClosure::do_oop_nv(T* p) {
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   156
  T o = RawAccess<>::oop_load(p);
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   157
  if (CompressedOops::is_null(o)) {
24106
dae9277bdf2a 8040722: G1: Clean up usages of heap_region_containing
brutisso
parents: 22905
diff changeset
   158
    return;
dae9277bdf2a 8040722: G1: Clean up usages of heap_region_containing
brutisso
parents: 22905
diff changeset
   159
  }
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   160
  oop obj = CompressedOops::decode_not_null(o);
11586
ccc217c177ee 7133038: G1: Some small profile based optimizations
johnc
parents: 11584
diff changeset
   161
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   162
  check_obj_during_refinement(p, obj);
11586
ccc217c177ee 7133038: G1: Some small profile based optimizations
johnc
parents: 11584
diff changeset
   163
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   164
  assert(!_g1->is_in_cset((HeapWord*)p), "Oop originates from " PTR_FORMAT " (region: %u) which is in the collection set.", p2i(p), _g1->addr_to_region((HeapWord*)p));
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   165
  const InCSetState state = _g1->in_cset_state(obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   166
  if (state.is_in_cset()) {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   167
    // Since the source is always from outside the collection set, here we implicitly know
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   168
    // that this is a cross-region reference too.
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   169
    prefetch_and_push(p, obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   170
  } else {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   171
    HeapRegion* to = _g1->heap_region_containing(obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   172
    if (_from == to) {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   173
      return;
11586
ccc217c177ee 7133038: G1: Some small profile based optimizations
johnc
parents: 11584
diff changeset
   174
    }
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   175
    handle_non_cset_obj_common(state, p, obj);
13333
f51af0093d29 7173712: G1: Duplicated code in G1UpdateRSOrPushRefOopClosure::do_oop_nv()
johnc
parents: 11586
diff changeset
   176
    to->rem_set()->add_reference(p, _worker_i);
11586
ccc217c177ee 7133038: G1: Some small profile based optimizations
johnc
parents: 11584
diff changeset
   177
  }
ccc217c177ee 7133038: G1: Some small profile based optimizations
johnc
parents: 11584
diff changeset
   178
}
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   179
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   180
template <class T>
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   181
inline void G1ScanObjsDuringScanRSClosure::do_oop_nv(T* p) {
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   182
  T heap_oop = RawAccess<>::oop_load(p);
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   183
  if (CompressedOops::is_null(heap_oop)) {
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   184
    return;
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   185
  }
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   186
  oop obj = CompressedOops::decode_not_null(heap_oop);
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   187
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   188
  const InCSetState state = _g1->in_cset_state(obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   189
  if (state.is_in_cset()) {
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   190
    prefetch_and_push(p, obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   191
  } else {
46646
5165b3a5b44a 8183397: Ensure consistent closure filtering during evacuation
tschatzl
parents: 46572
diff changeset
   192
    if (HeapRegion::is_in_same_region(p, obj)) {
5165b3a5b44a 8183397: Ensure consistent closure filtering during evacuation
tschatzl
parents: 46572
diff changeset
   193
      return;
5165b3a5b44a 8183397: Ensure consistent closure filtering during evacuation
tschatzl
parents: 46572
diff changeset
   194
    }
46572
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   195
    handle_non_cset_obj_common(state, p, obj);
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   196
  }
fef0d64b2263 8175554: Improve G1UpdateRSOrPushRefClosure
tschatzl
parents: 46519
diff changeset
   197
}
11586
ccc217c177ee 7133038: G1: Some small profile based optimizations
johnc
parents: 11584
diff changeset
   198
47580
96392e113a0a 8186777: Make Klass::_java_mirror an OopHandle
coleenp
parents: 47216
diff changeset
   199
void G1ParCopyHelper::do_cld_barrier(oop new_obj) {
33786
ac8da6513351 8139867: Change how startsHumongous and continuesHumongous regions work in G1.
david
parents: 33740
diff changeset
   200
  if (_g1->heap_region_containing(new_obj)->is_young()) {
47580
96392e113a0a 8186777: Make Klass::_java_mirror an OopHandle
coleenp
parents: 47216
diff changeset
   201
    _scanned_cld->record_modified_oops();
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   202
  }
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   203
}
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   204
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   205
void G1ParCopyHelper::mark_object(oop obj) {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   206
  assert(!_g1->heap_region_containing(obj)->in_collection_set(), "should not mark objects in the CSet");
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   207
49606
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   208
  // We know that the object is not moving so it's safe to read its size.
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   209
  _cm->mark_in_next_bitmap(_worker_id, obj);
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   210
}
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   211
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   212
void G1ParCopyHelper::mark_forwarded_object(oop from_obj, oop to_obj) {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   213
  assert(from_obj->is_forwarded(), "from obj should be forwarded");
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   214
  assert(from_obj->forwardee() == to_obj, "to obj should be the forwardee");
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   215
  assert(from_obj != to_obj, "should not be self-forwarded");
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   216
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   217
  assert(_g1->heap_region_containing(from_obj)->in_collection_set(), "from obj should be in the CSet");
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   218
  assert(!_g1->heap_region_containing(to_obj)->in_collection_set(), "should not mark objects in the CSet");
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   219
49606
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   220
  // The object might be in the process of being copied by another
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   221
  // worker so we cannot trust that its to-space image is
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   222
  // well-formed. So we have to read its size from its from-space
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   223
  // image which we know should not be changing.
9ae8719efcae 8197850: Calculate liveness in regions during marking
tschatzl
parents: 49592
diff changeset
   224
  _cm->mark_in_next_bitmap(_worker_id, to_obj, from_obj->size());
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   225
}
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   226
49337
e4fdca451542 8197847: Remove unused file g1ParScanThreadState_ext.cpp
ehelin
parents: 48633
diff changeset
   227
template <G1Barrier barrier, G1Mark do_mark_object>
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   228
template <class T>
49337
e4fdca451542 8197847: Remove unused file g1ParScanThreadState_ext.cpp
ehelin
parents: 48633
diff changeset
   229
void G1ParCopyClosure<barrier, do_mark_object>::do_oop_work(T* p) {
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   230
  T heap_oop = RawAccess<>::oop_load(p);
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   231
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   232
  if (CompressedOops::is_null(heap_oop)) {
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   233
    return;
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   234
  }
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   235
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   236
  oop obj = CompressedOops::decode_not_null(heap_oop);
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   237
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   238
  assert(_worker_id == _par_scan_state->worker_id(), "sanity");
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   239
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   240
  const InCSetState state = _g1->in_cset_state(obj);
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   241
  if (state.is_in_cset()) {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   242
    oop forwardee;
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   243
    markOop m = obj->mark();
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   244
    if (m->is_marked()) {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   245
      forwardee = (oop) m->decode_pointer();
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   246
    } else {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   247
      forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m);
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   248
    }
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   249
    assert(forwardee != NULL, "forwardee should not be NULL");
49592
77fb0be7d19f 8199946: Move load/store and encode/decode out of oopDesc
stefank
parents: 49337
diff changeset
   250
    RawAccess<>::oop_store(p, forwardee);
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   251
    if (do_mark_object != G1MarkNone && forwardee != obj) {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   252
      // If the object is self-forwarded we don't need to explicitly
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   253
      // mark it, the evacuation failure protocol will do so.
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   254
      mark_forwarded_object(obj, forwardee);
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   255
    }
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   256
47580
96392e113a0a 8186777: Make Klass::_java_mirror an OopHandle
coleenp
parents: 47216
diff changeset
   257
    if (barrier == G1BarrierCLD) {
96392e113a0a 8186777: Make Klass::_java_mirror an OopHandle
coleenp
parents: 47216
diff changeset
   258
      do_cld_barrier(forwardee);
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   259
    }
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   260
  } else {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   261
    if (state.is_humongous()) {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   262
      _g1->set_humongous_is_live(obj);
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   263
    }
35051
002d874a4284 8144714: Add extension point to G1 evacuation closures
mgerdin
parents: 34616
diff changeset
   264
33213
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   265
    // The object is not in collection set. If we're a root scanning
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   266
    // closure during an initial mark pause then attempt to mark the object.
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   267
    if (do_mark_object == G1MarkFromRoot) {
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   268
      mark_object(obj);
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   269
    }
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   270
  }
b937f634f56e 8138762: Refactor setup of evacuation closures in G1
mgerdin
parents: 32185
diff changeset
   271
}
49607
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   272
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   273
template <class T> void G1RebuildRemSetClosure::do_oop_nv(T* p) {
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   274
  oop const obj = RawAccess<MO_VOLATILE>::oop_load(p);
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   275
  if (obj == NULL) {
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   276
    return;
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   277
  }
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   278
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   279
  if (HeapRegion::is_in_same_region(p, obj)) {
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   280
    return;
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   281
  }
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   282
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   283
  HeapRegion* to = _g1->heap_region_containing(obj);
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   284
  HeapRegionRemSet* rem_set = to->rem_set();
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   285
  rem_set->add_reference(p, _worker_id);
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   286
}
acffe6ff3ae7 8180415: Rebuild remembered sets during the concurrent cycle
tschatzl
parents: 49606
diff changeset
   287
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30173
diff changeset
   288
#endif // SHARE_VM_GC_G1_G1OOPCLOSURES_INLINE_HPP