src/share/vm/gc_implementation/g1/heapRegionSets.hpp

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

author
johnc
date
Thu, 22 Sep 2011 10:57:37 -0700
changeset 3175
4dfb2df418f2
parent 2974
e8b0b0392037
child 3268
8aae2050e83e
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

tonyp@2472 1 /*
tonyp@2962 2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
tonyp@2472 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
tonyp@2472 4 *
tonyp@2472 5 * This code is free software; you can redistribute it and/or modify it
tonyp@2472 6 * under the terms of the GNU General Public License version 2 only, as
tonyp@2472 7 * published by the Free Software Foundation.
tonyp@2472 8 *
tonyp@2472 9 * This code is distributed in the hope that it will be useful, but WITHOUT
tonyp@2472 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
tonyp@2472 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
tonyp@2472 12 * version 2 for more details (a copy is included in the LICENSE file that
tonyp@2472 13 * accompanied this code).
tonyp@2472 14 *
tonyp@2472 15 * You should have received a copy of the GNU General Public License version
tonyp@2472 16 * 2 along with this work; if not, write to the Free Software Foundation,
tonyp@2472 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
tonyp@2472 18 *
tonyp@2472 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
tonyp@2472 20 * or visit www.oracle.com if you need additional information or have any
tonyp@2472 21 * questions.
tonyp@2472 22 *
tonyp@2472 23 */
tonyp@2472 24
tonyp@2472 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSETS_HPP
tonyp@2472 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSETS_HPP
tonyp@2472 27
tonyp@2472 28 #include "gc_implementation/g1/heapRegionSet.inline.hpp"
tonyp@2472 29
tonyp@2472 30 //////////////////// FreeRegionList ////////////////////
tonyp@2472 31
tonyp@2472 32 class FreeRegionList : public HeapRegionLinkedList {
tonyp@2472 33 protected:
tonyp@2472 34 virtual const char* verify_region_extra(HeapRegion* hr);
tonyp@2472 35
tonyp@2472 36 virtual bool regions_humongous() { return false; }
tonyp@2472 37 virtual bool regions_empty() { return true; }
tonyp@2472 38
tonyp@2472 39 public:
tonyp@2472 40 FreeRegionList(const char* name) : HeapRegionLinkedList(name) { }
tonyp@2472 41 };
tonyp@2472 42
tonyp@2472 43 //////////////////// MasterFreeRegionList ////////////////////
tonyp@2472 44
tonyp@2472 45 class MasterFreeRegionList : public FreeRegionList {
tonyp@2472 46 protected:
tonyp@2974 47 virtual const char* verify_region_extra(HeapRegion* hr);
tonyp@2472 48 virtual bool check_mt_safety();
tonyp@2472 49
tonyp@2472 50 public:
tonyp@2472 51 MasterFreeRegionList(const char* name) : FreeRegionList(name) { }
tonyp@2472 52 };
tonyp@2472 53
tonyp@2472 54 //////////////////// SecondaryFreeRegionList ////////////////////
tonyp@2472 55
tonyp@2472 56 class SecondaryFreeRegionList : public FreeRegionList {
tonyp@2472 57 protected:
tonyp@2472 58 virtual bool check_mt_safety();
tonyp@2472 59
tonyp@2472 60 public:
tonyp@2472 61 SecondaryFreeRegionList(const char* name) : FreeRegionList(name) { }
tonyp@2472 62 };
tonyp@2472 63
tonyp@2472 64 //////////////////// HumongousRegionSet ////////////////////
tonyp@2472 65
tonyp@2472 66 class HumongousRegionSet : public HeapRegionSet {
tonyp@2472 67 protected:
tonyp@2472 68 virtual const char* verify_region_extra(HeapRegion* hr);
tonyp@2472 69
tonyp@2472 70 virtual bool regions_humongous() { return true; }
tonyp@2472 71 virtual bool regions_empty() { return false; }
tonyp@2472 72
tonyp@2472 73 public:
tonyp@2472 74 HumongousRegionSet(const char* name) : HeapRegionSet(name) { }
tonyp@2472 75 };
tonyp@2472 76
tonyp@2472 77 //////////////////// MasterHumongousRegionSet ////////////////////
tonyp@2472 78
tonyp@2472 79 class MasterHumongousRegionSet : public HumongousRegionSet {
tonyp@2472 80 protected:
tonyp@2472 81 virtual bool check_mt_safety();
tonyp@2472 82
tonyp@2472 83 public:
tonyp@2472 84 MasterHumongousRegionSet(const char* name) : HumongousRegionSet(name) { }
tonyp@2472 85 };
tonyp@2472 86
tonyp@2472 87 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSETS_HPP

mercurial