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_SHENANDOAHOOPCLOSURES_INLINE_HPP
26 #define SHARE_GC_SHENANDOAH_SHENANDOAHOOPCLOSURES_INLINE_HPP
27
28 #include "gc/shenandoah/shenandoahOopClosures.hpp"
29
30 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
31 #include "gc/shenandoah/shenandoahMark.inline.hpp"
32
33 template<class T>
34 inline void ShenandoahMarkRefsSuperClosure::work(T* p) {
35 ShenandoahMark::mark_through_ref<T>(p, _queue, _mark_context, _weak);
36 }
37
38 template<class T>
39 inline void ShenandoahMarkUpdateRefsSuperClosure::work(T* p) {
40 // Update the location
41 _heap->update_with_forwarded(p);
42
43 // ...then do the usual thing
44 ShenandoahMarkRefsSuperClosure::work<T>(p);
45 }
46
47 template<class T>
48 inline void ShenandoahSTWUpdateRefsClosure::work(T* p) {
49 _heap->update_with_forwarded(p);
50 }
51
52 template<class T>
53 inline void ShenandoahConcUpdateRefsClosure::work(T* p) {
54 _heap->conc_update_with_forwarded(p);
55 }
56
57 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHOOPCLOSURES_INLINE_HPP
|
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_SHENANDOAHOOPCLOSURES_INLINE_HPP
26 #define SHARE_GC_SHENANDOAH_SHENANDOAHOOPCLOSURES_INLINE_HPP
27
28 #include "gc/shenandoah/shenandoahOopClosures.hpp"
29
30 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
31 #include "gc/shenandoah/shenandoahMark.inline.hpp"
32
33 template<class T, GenerationMode GENERATION>
34 inline void ShenandoahMarkRefsSuperClosure::work(T* p) {
35 ShenandoahMark::mark_through_ref<T, GENERATION>(p, _queue, _old_queue, _mark_context, _weak);
36 }
37
38 template<class T, GenerationMode GENERATION>
39 inline void ShenandoahMarkUpdateRefsSuperClosure::work(T* p) {
40 // Update the location
41 _heap->update_with_forwarded(p);
42
43 // ...then do the usual thing
44 ShenandoahMarkRefsSuperClosure::work<T, GENERATION>(p);
45 }
46
47 template<class T>
48 inline void ShenandoahSTWUpdateRefsClosure::work(T* p) {
49 _heap->update_with_forwarded(p);
50 }
51
52 template<class T>
53 inline void ShenandoahConcUpdateRefsClosure::work(T* p) {
54 _heap->conc_update_with_forwarded(p);
55 }
56
57 template<class T>
58 inline void ShenandoahVerifyRemSetClosure::work(T* p) {
59 T o = RawAccess<>::oop_load(p);
60 if (!CompressedOops::is_null(o)) {
61 oop obj = CompressedOops::decode_not_null(o);
62 if (_heap->is_in_young(obj)) {
63 size_t card_index = _scanner->card_index_for_addr((HeapWord*) p);
64 if (_init_mark && !_scanner->is_card_dirty(card_index)) {
65 ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, NULL,
66 "Verify init-mark remembered set violation", "clean card should be dirty", __FILE__, __LINE__);
67 } else if (!_init_mark && !_scanner->is_write_card_dirty(card_index)) {
68 ShenandoahAsserts::print_failure(ShenandoahAsserts::_safe_all, obj, p, NULL,
69 "Verify init-update-refs remembered set violation", "clean card should be dirty", __FILE__, __LINE__);
70 }
71 }
72 }
73 }
74
75 template<class T>
76 inline void ShenandoahSetRememberedCardsToDirtyClosure::work(T* p) {
77 T o = RawAccess<>::oop_load(p);
78 if (!CompressedOops::is_null(o)) {
79 oop obj = CompressedOops::decode_not_null(o);
80 if (_heap->is_in_young(obj)) {
81 // Found interesting pointer. Mark the containing card as dirty.
82 _scanner->mark_card_as_dirty((HeapWord*) p);
83 }
84 }
85 }
86
87 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHOOPCLOSURES_INLINE_HPP
|