18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #include "precompiled.hpp"
25
26 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
27 #include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp"
28 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
29
30 ShenandoahSATBMarkQueueSet::ShenandoahSATBMarkQueueSet() :
31 _heap(NULL),
32 _satb_mark_queue_buffer_allocator("SATB Buffer Allocator", ShenandoahSATBBufferSize)
33 {}
34
35 void ShenandoahSATBMarkQueueSet::initialize(ShenandoahHeap* const heap,
36 Monitor* cbl_mon,
37 int process_completed_threshold,
38 uint buffer_enqueue_threshold_percentage,
39 Mutex* lock) {
40 SATBMarkQueueSet::initialize(cbl_mon,
41 &_satb_mark_queue_buffer_allocator,
42 process_completed_threshold,
43 buffer_enqueue_threshold_percentage,
44 lock);
45 _heap = heap;
46 }
47
48 SATBMarkQueue& ShenandoahSATBMarkQueueSet::satb_queue_for_thread(JavaThread* const t) const {
49 return ShenandoahThreadLocalData::satb_mark_queue(t);
50 }
51
52 template <bool RESOLVE>
53 class ShenandoahSATBMarkQueueFilterFn {
54 ShenandoahHeap* const _heap;
55
56 public:
57 ShenandoahSATBMarkQueueFilterFn(ShenandoahHeap* heap) : _heap(heap) {}
58
59 // Return true if entry should be filtered out (removed), false if
60 // it should be retained.
61 bool operator()(const void* entry) const {
62 return !_heap->requires_marking<RESOLVE>(entry);
63 }
64 };
65
66 void ShenandoahSATBMarkQueueSet::filter(SATBMarkQueue* queue) {
67 assert(_heap != NULL, "SATB queue set not initialized");
68 if (_heap->has_forwarded_objects()) {
|
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #include "precompiled.hpp"
25
26 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
27 #include "gc/shenandoah/shenandoahSATBMarkQueueSet.hpp"
28 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
29
30 ShenandoahSATBMarkQueueSet::ShenandoahSATBMarkQueueSet() :
31 _heap(NULL),
32 _satb_mark_queue_buffer_allocator("SATB Buffer Allocator", ShenandoahSATBBufferSize)
33 {}
34
35 void ShenandoahSATBMarkQueueSet::initialize(ShenandoahHeap* const heap,
36 Monitor* cbl_mon,
37 int process_completed_threshold,
38 uint buffer_enqueue_threshold_percentage) {
39 SATBMarkQueueSet::initialize(cbl_mon,
40 &_satb_mark_queue_buffer_allocator,
41 process_completed_threshold,
42 buffer_enqueue_threshold_percentage);
43 _heap = heap;
44 }
45
46 SATBMarkQueue& ShenandoahSATBMarkQueueSet::satb_queue_for_thread(Thread* const t) const {
47 return ShenandoahThreadLocalData::satb_mark_queue(t);
48 }
49
50 template <bool RESOLVE>
51 class ShenandoahSATBMarkQueueFilterFn {
52 ShenandoahHeap* const _heap;
53
54 public:
55 ShenandoahSATBMarkQueueFilterFn(ShenandoahHeap* heap) : _heap(heap) {}
56
57 // Return true if entry should be filtered out (removed), false if
58 // it should be retained.
59 bool operator()(const void* entry) const {
60 return !_heap->requires_marking<RESOLVE>(entry);
61 }
62 };
63
64 void ShenandoahSATBMarkQueueSet::filter(SATBMarkQueue* queue) {
65 assert(_heap != NULL, "SATB queue set not initialized");
66 if (_heap->has_forwarded_objects()) {
|