< prev index next >

src/hotspot/share/gc/shared/preservedMarks.inline.hpp

Print this page

31 #include "oops/oop.inline.hpp"
32 #include "utilities/stack.inline.hpp"
33 
34 inline bool PreservedMarks::should_preserve_mark(oop obj, markWord m) const {
35   return obj->mark_must_be_preserved(m);
36 }
37 
38 inline void PreservedMarks::push(oop obj, markWord m) {
39   assert(should_preserve_mark(obj, m), "pre-condition");
40   OopAndMarkWord elem(obj, m);
41   _stack.push(elem);
42 }
43 
44 inline void PreservedMarks::push_if_necessary(oop obj, markWord m) {
45   if (should_preserve_mark(obj, m)) {
46     push(obj, m);
47   }
48 }
49 
50 inline void PreservedMarks::init_forwarded_mark(oop obj) {
51   obj->init_mark();













52 }
53 
54 inline PreservedMarks::PreservedMarks()
55     : _stack(OopAndMarkWordStack::default_segment_size(),
56              // This stack should be used very infrequently so there's
57              // no point in caching stack segments (there will be a
58              // waste of space most of the time). So we set the max
59              // cache size to 0.
60              0 /* max_cache_size */) { }
61 
62 void PreservedMarks::OopAndMarkWord::set_mark() const {
63   _o->set_mark(_m);
64 }
65 
66 #endif // SHARE_GC_SHARED_PRESERVEDMARKS_INLINE_HPP

31 #include "oops/oop.inline.hpp"
32 #include "utilities/stack.inline.hpp"
33 
34 inline bool PreservedMarks::should_preserve_mark(oop obj, markWord m) const {
35   return obj->mark_must_be_preserved(m);
36 }
37 
38 inline void PreservedMarks::push(oop obj, markWord m) {
39   assert(should_preserve_mark(obj, m), "pre-condition");
40   OopAndMarkWord elem(obj, m);
41   _stack.push(elem);
42 }
43 
44 inline void PreservedMarks::push_if_necessary(oop obj, markWord m) {
45   if (should_preserve_mark(obj, m)) {
46     push(obj, m);
47   }
48 }
49 
50 inline void PreservedMarks::init_forwarded_mark(oop obj) {
51   assert(obj->is_forwarded(), "only forwarded here");
52 #ifdef _LP64
53   oop forwardee = obj->forwardee();
54   markWord header = forwardee->mark();
55   if (header.has_displaced_mark_helper()) {
56     header = header.displaced_mark_helper();
57   }
58   assert(UseCompressedClassPointers, "assume +UseCompressedClassPointers");
59   narrowKlass nklass = header.narrow_klass();
60   assert(nklass == obj->narrow_klass_legacy(), "narrow klass must match: header: " PTR_FORMAT ", nklass: " PTR_FORMAT, forwardee->mark().value(), uintptr_t(nklass));
61   obj->set_mark(markWord::prototype().set_narrow_klass(nklass));
62 #else
63   obj->set_mark(markWord::prototype());
64 #endif
65 }
66 
67 inline PreservedMarks::PreservedMarks()
68     : _stack(OopAndMarkWordStack::default_segment_size(),
69              // This stack should be used very infrequently so there's
70              // no point in caching stack segments (there will be a
71              // waste of space most of the time). So we set the max
72              // cache size to 0.
73              0 /* max_cache_size */) { }
74 
75 void PreservedMarks::OopAndMarkWord::set_mark() const {
76   _o->set_mark(_m);
77 }
78 
79 #endif // SHARE_GC_SHARED_PRESERVEDMARKS_INLINE_HPP
< prev index next >