16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHCONCURRENTMARK_HPP
25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHCONCURRENTMARK_HPP
26
27 #include "gc/shared/taskqueue.hpp"
28 #include "gc/shared/workgroup.hpp"
29 #include "gc/shenandoah/shenandoahPhaseTimings.hpp"
30 #include "gc/shenandoah/shenandoahOopClosures.hpp"
31 #include "gc/shenandoah/shenandoahTaskqueue.hpp"
32
33 class ShenandoahStrDedupQueue;
34
35 class ShenandoahConcurrentMark: public CHeapObj<mtGC> {
36
37 private:
38 ShenandoahHeap* _heap;
39
40 // The per-worker-thread work queues
41 ShenandoahObjToScanQueueSet* _task_queues;
42
43 ShenandoahSharedFlag _process_references;
44 ShenandoahSharedFlag _unload_classes;
45
46 ShenandoahSharedFlag _claimed_codecache;
47
48 // Used for buffering per-region liveness data.
49 // Needed since ShenandoahHeapRegion uses atomics to update liveness.
50 //
51 // The array has max-workers elements, each of which is an array of
52 // jushort * max_regions. The choice of jushort is not accidental:
53 // there is a tradeoff between static/dynamic footprint that translates
54 // into cache pressure (which is already high during marking), and
55 // too many atomic updates. size_t/jint is too large, jbyte is too small.
56 jushort** _liveness_local;
|
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHCONCURRENTMARK_HPP
25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHCONCURRENTMARK_HPP
26
27 #include "gc/shared/taskqueue.hpp"
28 #include "gc/shared/workgroup.hpp"
29 #include "gc/shenandoah/shenandoahPhaseTimings.hpp"
30 #include "gc/shenandoah/shenandoahOopClosures.hpp"
31 #include "gc/shenandoah/shenandoahTaskqueue.hpp"
32
33 class ShenandoahStrDedupQueue;
34
35 class ShenandoahConcurrentMark: public CHeapObj<mtGC> {
36 friend class ShenandoahTraversalGC;
37 private:
38 ShenandoahHeap* _heap;
39
40 // The per-worker-thread work queues
41 ShenandoahObjToScanQueueSet* _task_queues;
42
43 ShenandoahSharedFlag _process_references;
44 ShenandoahSharedFlag _unload_classes;
45
46 ShenandoahSharedFlag _claimed_codecache;
47
48 // Used for buffering per-region liveness data.
49 // Needed since ShenandoahHeapRegion uses atomics to update liveness.
50 //
51 // The array has max-workers elements, each of which is an array of
52 // jushort * max_regions. The choice of jushort is not accidental:
53 // there is a tradeoff between static/dynamic footprint that translates
54 // into cache pressure (which is already high during marking), and
55 // too many atomic updates. size_t/jint is too large, jbyte is too small.
56 jushort** _liveness_local;
|