< prev index next >

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

Print this page
rev 49290 : [mq]: JDK-8199735.01.patch


  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);
  59   inline void push_if_necessary(oop obj, markOop m);
  60   // Iterate over the stack, restore all preserved marks, and
  61   // reclaim the memory taken up by the stack segments.
  62   void restore();
  63   // Iterate over the stack, adjust all preserved marks according
  64   // to their forwarding location stored in the mark.
  65   void adjust_during_full_gc();
  66 
  67   void restore_and_increment(volatile size_t* const _total_size_addr);




  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     inline void set_mark() const;
  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);
  59   inline void push_if_necessary(oop obj, markOop m);
  60   // Iterate over the stack, restore all preserved marks, and
  61   // reclaim the memory taken up by the stack segments.
  62   void restore();
  63   // Iterate over the stack, adjust all preserved marks according
  64   // to their forwarding location stored in the mark.
  65   void adjust_during_full_gc();
  66 
  67   void restore_and_increment(volatile size_t* const _total_size_addr);


< prev index next >