1 /* 2 * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHMARKCLOSURES_HPP 26 #define SHARE_GC_SHENANDOAH_SHENANDOAHMARKCLOSURES_HPP 27 28 #include "gc/shenandoah/shenandoahHeap.hpp" 29 #include "gc/shenandoah/shenandoahAgeCensus.hpp" 30 31 class ShenandoahMarkingContext; 32 class ShenandoahHeapRegion; 33 34 class ShenandoahFinalMarkUpdateRegionStateClosure : public ShenandoahHeapRegionClosure { 35 private: 36 ShenandoahMarkingContext* const _ctx; 37 ShenandoahHeapLock* const _lock; 38 public: 39 explicit ShenandoahFinalMarkUpdateRegionStateClosure(ShenandoahMarkingContext* ctx); 40 41 void heap_region_do(ShenandoahHeapRegion* r); 42 43 bool is_thread_safe() { return true; } 44 }; 45 46 // Add [TAMS, top) volume over young regions. Used to correct age 0 cohort census 47 // for adaptive tenuring when census is taken during marking. 48 // In non-product builds, for the purposes of verification, we also collect the total 49 // live objects in young regions as well. 50 class ShenandoahUpdateCensusZeroCohortClosure : public ShenandoahHeapRegionClosure { 51 private: 52 ShenandoahMarkingContext* const _ctx; 53 // Population size units are words (not bytes) 54 size_t _age0_pop; // running tally of age0 population size 55 size_t _total_pop; // total live population size 56 public: 57 ShenandoahUpdateCensusZeroCohortClosure(ShenandoahMarkingContext* ctx); 58 59 void heap_region_do(ShenandoahHeapRegion* r); 60 61 size_t get_age0_population() { return _age0_pop; } 62 size_t get_total_population() { return _total_pop; } 63 }; 64 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHMARKCLOSURES_HPP