25 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_INLINE_HPP
26 #define SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_INLINE_HPP
27
28 #include "gc/shared/barrierSet.hpp"
29 #include "gc/shenandoah/shenandoahAsserts.hpp"
30 #include "gc/shenandoah/shenandoahBarrierSet.hpp"
31 #include "gc/shenandoah/shenandoahCollectionSet.inline.hpp"
32 #include "gc/shenandoah/shenandoahForwarding.inline.hpp"
33 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
34 #include "gc/shenandoah/shenandoahHeapRegion.hpp"
35 #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp"
36 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
37 #include "memory/iterator.inline.hpp"
38 #include "oops/oop.inline.hpp"
39
40 inline oop ShenandoahBarrierSet::resolve_forwarded_not_null(oop p) {
41 return ShenandoahForwarding::get_forwardee(p);
42 }
43
44 inline oop ShenandoahBarrierSet::resolve_forwarded(oop p) {
45 if (p != NULL) {
46 return resolve_forwarded_not_null(p);
47 } else {
48 return p;
49 }
50 }
51
52 inline void ShenandoahBarrierSet::enqueue(oop obj) {
53 shenandoah_assert_not_forwarded_if(NULL, obj, _heap->is_concurrent_traversal_in_progress());
54 assert(_satb_mark_queue_set.is_active(), "only get here when SATB active");
55
56 // Filter marked objects before hitting the SATB queues. The same predicate would
57 // be used by SATBMQ::filter to eliminate already marked objects downstream, but
58 // filtering here helps to avoid wasteful SATB queueing work to begin with.
59 if (!_heap->requires_marking<false>(obj)) return;
60
61 ShenandoahThreadLocalData::satb_mark_queue(Thread::current()).enqueue_known_active(obj);
62 }
63
64 template <DecoratorSet decorators, typename T>
65 inline void ShenandoahBarrierSet::satb_barrier(T *field) {
|
25 #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_INLINE_HPP
26 #define SHARE_GC_SHENANDOAH_SHENANDOAHBARRIERSET_INLINE_HPP
27
28 #include "gc/shared/barrierSet.hpp"
29 #include "gc/shenandoah/shenandoahAsserts.hpp"
30 #include "gc/shenandoah/shenandoahBarrierSet.hpp"
31 #include "gc/shenandoah/shenandoahCollectionSet.inline.hpp"
32 #include "gc/shenandoah/shenandoahForwarding.inline.hpp"
33 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
34 #include "gc/shenandoah/shenandoahHeapRegion.hpp"
35 #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp"
36 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
37 #include "memory/iterator.inline.hpp"
38 #include "oops/oop.inline.hpp"
39
40 inline oop ShenandoahBarrierSet::resolve_forwarded_not_null(oop p) {
41 return ShenandoahForwarding::get_forwardee(p);
42 }
43
44 inline oop ShenandoahBarrierSet::resolve_forwarded(oop p) {
45 if (cast_from_oop<HeapWord*>(p) != NULL) {
46 return resolve_forwarded_not_null(p);
47 } else {
48 return p;
49 }
50 }
51
52 inline void ShenandoahBarrierSet::enqueue(oop obj) {
53 shenandoah_assert_not_forwarded_if(NULL, obj, _heap->is_concurrent_traversal_in_progress());
54 assert(_satb_mark_queue_set.is_active(), "only get here when SATB active");
55
56 // Filter marked objects before hitting the SATB queues. The same predicate would
57 // be used by SATBMQ::filter to eliminate already marked objects downstream, but
58 // filtering here helps to avoid wasteful SATB queueing work to begin with.
59 if (!_heap->requires_marking<false>(obj)) return;
60
61 ShenandoahThreadLocalData::satb_mark_queue(Thread::current()).enqueue_known_active(obj);
62 }
63
64 template <DecoratorSet decorators, typename T>
65 inline void ShenandoahBarrierSet::satb_barrier(T *field) {
|