< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahMarkingContext.hpp

Print this page

30 #include "memory/allocation.hpp"
31 #include "memory/memRegion.hpp"
32 #include "oops/oopsHierarchy.hpp"
33 
34 class ShenandoahObjToScanQueueSet;
35 
36 /**
37  * Encapsulate a marking bitmap with the top-at-mark-start and top-bitmaps array.
38  */
39 class ShenandoahMarkingContext : public CHeapObj<mtGC> {
40 private:
41   // Marking bitmap
42   ShenandoahMarkBitMap _mark_bit_map;
43 
44   HeapWord** const _top_bitmaps;
45   HeapWord** const _top_at_mark_starts_base;
46   HeapWord** const _top_at_mark_starts;
47 
48   ShenandoahSharedFlag _is_complete;
49 
50   // Marking task queues
51   ShenandoahObjToScanQueueSet* _task_queues;
52 
53 public:
54   ShenandoahMarkingContext(MemRegion heap_region, MemRegion bitmap_region, size_t num_regions, uint max_queues);
55   ~ShenandoahMarkingContext();
56 
57   /*
58    * Marks the object. Returns true if the object has not been marked before and has
59    * been marked by this thread. Returns false if the object has already been marked,
60    * or if a competing thread succeeded in marking this object.
61    */
62   inline bool mark_strong(oop obj, bool& was_upgraded);
63   inline bool mark_weak(oop obj);
64 
65   // Simple versions of marking accessors, to be used outside of marking (e.g. no possible concurrent updates)
66   inline bool is_marked(oop) const;
67   inline bool is_marked_strong(oop obj) const;
68   inline bool is_marked_weak(oop obj) const;


69 
70   inline HeapWord* get_next_marked_addr(HeapWord* addr, HeapWord* limit) const;
71 
72   inline bool allocated_after_mark_start(oop obj) const;
73   inline bool allocated_after_mark_start(HeapWord* addr) const;
74 
75   inline HeapWord* top_at_mark_start(ShenandoahHeapRegion* r) const;
76   inline void capture_top_at_mark_start(ShenandoahHeapRegion* r);
77   inline void reset_top_at_mark_start(ShenandoahHeapRegion* r);
78   void initialize_top_at_mark_start(ShenandoahHeapRegion* r);
79 


80   inline void reset_top_bitmap(ShenandoahHeapRegion *r);
81   void clear_bitmap(ShenandoahHeapRegion *r);
82 
83   bool is_bitmap_clear() const;
84   bool is_bitmap_clear_range(HeapWord* start, HeapWord* end) const;
85 
86   bool is_complete();
87   void mark_complete();
88   void mark_incomplete();
89 
90   // Task queues
91   ShenandoahObjToScanQueueSet* task_queues() const { return _task_queues; }
92 };
93 
94 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHMARKINGCONTEXT_HPP

30 #include "memory/allocation.hpp"
31 #include "memory/memRegion.hpp"
32 #include "oops/oopsHierarchy.hpp"
33 
34 class ShenandoahObjToScanQueueSet;
35 
36 /**
37  * Encapsulate a marking bitmap with the top-at-mark-start and top-bitmaps array.
38  */
39 class ShenandoahMarkingContext : public CHeapObj<mtGC> {
40 private:
41   // Marking bitmap
42   ShenandoahMarkBitMap _mark_bit_map;
43 
44   HeapWord** const _top_bitmaps;
45   HeapWord** const _top_at_mark_starts_base;
46   HeapWord** const _top_at_mark_starts;
47 
48   ShenandoahSharedFlag _is_complete;
49 



50 public:
51   ShenandoahMarkingContext(MemRegion heap_region, MemRegion bitmap_region, size_t num_regions);

52 
53   /*
54    * Marks the object. Returns true if the object has not been marked before and has
55    * been marked by this thread. Returns false if the object has already been marked,
56    * or if a competing thread succeeded in marking this object.
57    */
58   inline bool mark_strong(oop obj, bool& was_upgraded);
59   inline bool mark_weak(oop obj);
60 
61   // Simple versions of marking accessors, to be used outside of marking (e.g. no possible concurrent updates)
62   inline bool is_marked(oop) const;
63   inline bool is_marked_strong(oop obj) const;
64   inline bool is_marked_weak(oop obj) const;
65   inline bool is_marked_or_old(oop obj) const;
66   inline bool is_marked_strong_or_old(oop obj) const;
67 
68   inline HeapWord* get_next_marked_addr(HeapWord* addr, HeapWord* limit) const;
69 
70   inline bool allocated_after_mark_start(oop obj) const;
71   inline bool allocated_after_mark_start(HeapWord* addr) const;
72 
73   inline HeapWord* top_at_mark_start(ShenandoahHeapRegion* r) const;
74   inline void capture_top_at_mark_start(ShenandoahHeapRegion* r);
75   inline void reset_top_at_mark_start(ShenandoahHeapRegion* r);
76   void initialize_top_at_mark_start(ShenandoahHeapRegion* r);
77 
78   HeapWord* top_bitmap(ShenandoahHeapRegion* r);
79 
80   inline void reset_top_bitmap(ShenandoahHeapRegion *r);
81   void clear_bitmap(ShenandoahHeapRegion *r);
82 
83   bool is_bitmap_clear() const;
84   bool is_bitmap_clear_range(const HeapWord* start, const HeapWord* end) const;
85 
86   bool is_complete();
87   void mark_complete();
88   void mark_incomplete();



89 };
90 
91 #endif // SHARE_GC_SHENANDOAH_SHENANDOAHMARKINGCONTEXT_HPP
< prev index next >