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_VM_GC_SHARED_PRESERVEDMARKS_HPP 26 #define SHARE_VM_GC_SHARED_PRESERVEDMARKS_HPP 27 28 #include "memory/allocation.hpp" 29 #include "memory/padded.hpp" 30 #include "oops/oop.hpp" 31 #include "utilities/stack.hpp" 32 33 class PreservedMarksSet; 34 class WorkGang; 35 36 class PreservedMarks VALUE_OBJ_CLASS_SPEC { 37 private: 38 class OopAndMarkOop VALUE_OBJ_CLASS_SPEC { 39 private: 40 oop _o; 41 markOop _m; 42 43 public: 44 OopAndMarkOop(oop obj, markOop m) : _o(obj), _m(m) { } 45 46 oop get_oop() { return _o; } 47 void set_mark() const { _o->set_mark(_m); } 48 void set_oop(oop obj) { _o = obj; } 49 }; 50 typedef Stack<OopAndMarkOop, mtGC> OopAndMarkOopStack; 51 52 OopAndMarkOopStack _stack; 53 54 inline bool should_preserve_mark(oop obj, markOop m) const; 55 56 public: 57 size_t size() const { return _stack.size(); } 58 inline void push(oop obj, markOop m); | 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_VM_GC_SHARED_PRESERVEDMARKS_HPP 26 #define SHARE_VM_GC_SHARED_PRESERVEDMARKS_HPP 27 28 #include "memory/allocation.hpp" 29 #include "memory/padded.hpp" 30 #include "oops/oop.hpp" 31 #include "utilities/stack.hpp" 32 33 class PreservedMarksSet; 34 class WorkGang; 35 36 class PreservedMarks { 37 private: 38 class OopAndMarkOop { 39 private: 40 oop _o; 41 markOop _m; 42 43 public: 44 OopAndMarkOop(oop obj, markOop m) : _o(obj), _m(m) { } 45 46 oop get_oop() { return _o; } 47 void set_mark() const { _o->set_mark(_m); } 48 void set_oop(oop obj) { _o = obj; } 49 }; 50 typedef Stack<OopAndMarkOop, mtGC> OopAndMarkOopStack; 51 52 OopAndMarkOopStack _stack; 53 54 inline bool should_preserve_mark(oop obj, markOop m) const; 55 56 public: 57 size_t size() const { return _stack.size(); } 58 inline void push(oop obj, markOop m); |