src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp

Thu, 22 Sep 2011 10:57:37 -0700

author
johnc
date
Thu, 22 Sep 2011 10:57:37 -0700
changeset 3175
4dfb2df418f2
parent 2963
c3f1170908be
child 3713
720b6a76dd9d
permissions
-rw-r--r--

6484982: G1: process references during evacuation pauses
Summary: G1 now uses two reference processors - one is used by concurrent marking and the other is used by STW GCs (both full and incremental evacuation pauses). In an evacuation pause, the reference processor is embedded into the closures used to scan objects. Doing so causes causes reference objects to be 'discovered' by the reference processor. At the end of the evacuation pause, these discovered reference objects are processed - preserving (and copying) referent objects (and their reachable graphs) as appropriate.
Reviewed-by: ysr, jwilhelm, brutisso, stefank, tonyp

ysr@777 1 /*
tonyp@2963 2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
ysr@777 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ysr@777 4 *
ysr@777 5 * This code is free software; you can redistribute it and/or modify it
ysr@777 6 * under the terms of the GNU General Public License version 2 only, as
ysr@777 7 * published by the Free Software Foundation.
ysr@777 8 *
ysr@777 9 * This code is distributed in the hope that it will be useful, but WITHOUT
ysr@777 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ysr@777 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ysr@777 12 * version 2 for more details (a copy is included in the LICENSE file that
ysr@777 13 * accompanied this code).
ysr@777 14 *
ysr@777 15 * You should have received a copy of the GNU General Public License version
ysr@777 16 * 2 along with this work; if not, write to the Free Software Foundation,
ysr@777 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ysr@777 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
ysr@777 22 *
ysr@777 23 */
ysr@777 24
stefank@2314 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_INLINE_HPP
stefank@2314 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_INLINE_HPP
stefank@2314 27
tonyp@2963 28 #include "gc_implementation/g1/heapRegion.hpp"
stefank@2314 29 #include "gc_implementation/g1/heapRegionSeq.hpp"
stefank@2314 30
tonyp@2963 31 inline size_t HeapRegionSeq::addr_to_index_biased(HeapWord* addr) const {
tonyp@2963 32 assert(_heap_bottom <= addr && addr < _heap_end,
tonyp@2963 33 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
tonyp@2963 34 addr, _heap_bottom, _heap_end));
tonyp@2963 35 size_t index = (size_t) addr >> _region_shift;
tonyp@2963 36 return index;
tonyp@2963 37 }
tonyp@2963 38
tonyp@2963 39 inline HeapRegion* HeapRegionSeq::addr_to_region_unsafe(HeapWord* addr) const {
tonyp@2963 40 assert(_heap_bottom <= addr && addr < _heap_end,
tonyp@2963 41 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
tonyp@2963 42 addr, _heap_bottom, _heap_end));
tonyp@2963 43 size_t index_biased = addr_to_index_biased(addr);
tonyp@2963 44 HeapRegion* hr = _regions_biased[index_biased];
tonyp@2963 45 assert(hr != NULL, "invariant");
tonyp@2963 46 return hr;
tonyp@2963 47 }
tonyp@2963 48
tonyp@2963 49 inline HeapRegion* HeapRegionSeq::addr_to_region(HeapWord* addr) const {
tonyp@2963 50 if (addr != NULL && addr < _heap_end) {
tonyp@2963 51 assert(addr >= _heap_bottom,
tonyp@2963 52 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, addr, _heap_bottom));
tonyp@2963 53 return addr_to_region_unsafe(addr);
ysr@777 54 }
ysr@777 55 return NULL;
ysr@777 56 }
stefank@2314 57
tonyp@2963 58 inline HeapRegion* HeapRegionSeq::at(size_t index) const {
tonyp@2963 59 assert(index < length(), "pre-condition");
tonyp@2963 60 HeapRegion* hr = _regions[index];
tonyp@2963 61 assert(hr != NULL, "sanity");
tonyp@2963 62 assert(hr->hrs_index() == index, "sanity");
tonyp@2963 63 return hr;
tonyp@2963 64 }
tonyp@2963 65
stefank@2314 66 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_INLINE_HPP

mercurial