< prev index next > src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp
Print this page
/*
* Copyright (c) 2013, 2021, Red Hat, Inc. All rights reserved.
+ * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
#include "gc/shared/bufferNode.hpp"
#include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp"
class ShenandoahHeap;
class ShenandoahBarrierSetAssembler;
class ShenandoahBarrierSet: public BarrierSet {
private:
ShenandoahHeap* const _heap;
BufferNode::Allocator _satb_mark_queue_buffer_allocator;
ShenandoahSATBMarkQueueSet _satb_mark_queue_set;
public:
! ShenandoahBarrierSet(ShenandoahHeap* heap);
static ShenandoahBarrierSetAssembler* assembler();
inline static ShenandoahBarrierSet* barrier_set() {
return barrier_set_cast<ShenandoahBarrierSet>(BarrierSet::barrier_set());
}
static ShenandoahSATBMarkQueueSet& satb_mark_queue_set() {
return barrier_set()->_satb_mark_queue_set;
}
static bool need_load_reference_barrier(DecoratorSet decorators, BasicType type);
#include "gc/shared/bufferNode.hpp"
#include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp"
class ShenandoahHeap;
class ShenandoahBarrierSetAssembler;
+ class ShenandoahCardTable;
class ShenandoahBarrierSet: public BarrierSet {
private:
ShenandoahHeap* const _heap;
+ ShenandoahCardTable* _card_table;
BufferNode::Allocator _satb_mark_queue_buffer_allocator;
ShenandoahSATBMarkQueueSet _satb_mark_queue_set;
public:
! ShenandoahBarrierSet(ShenandoahHeap* heap, MemRegion heap_region);
static ShenandoahBarrierSetAssembler* assembler();
inline static ShenandoahBarrierSet* barrier_set() {
return barrier_set_cast<ShenandoahBarrierSet>(BarrierSet::barrier_set());
}
+ inline ShenandoahCardTable* card_table() {
+ return _card_table;
+ }
+
static ShenandoahSATBMarkQueueSet& satb_mark_queue_set() {
return barrier_set()->_satb_mark_queue_set;
}
static bool need_load_reference_barrier(DecoratorSet decorators, BasicType type);
inline oop oop_cmpxchg(DecoratorSet decorators, T* addr, oop compare_value, oop new_value);
template <typename T>
inline oop oop_xchg(DecoratorSet decorators, T* addr, oop new_value);
private:
template <class T>
! inline void arraycopy_marking(T* src, T* dst, size_t count);
template <class T>
inline void arraycopy_evacuation(T* src, size_t count);
template <class T>
inline void arraycopy_update(T* src, size_t count);
inline oop oop_cmpxchg(DecoratorSet decorators, T* addr, oop compare_value, oop new_value);
template <typename T>
inline oop oop_xchg(DecoratorSet decorators, T* addr, oop new_value);
+ template <DecoratorSet decorators, typename T>
+ void write_ref_field_post(T* field);
+
+ void write_ref_array(HeapWord* start, size_t count);
+
private:
template <class T>
! inline void arraycopy_marking(T* src, T* dst, size_t count, bool is_old_marking);
template <class T>
inline void arraycopy_evacuation(T* src, size_t count);
template <class T>
inline void arraycopy_update(T* src, size_t count);
< prev index next >