23 */
24
25 #ifndef SHARE_GC_PARALLEL_PSPARALLELCOMPACT_HPP
26 #define SHARE_GC_PARALLEL_PSPARALLELCOMPACT_HPP
27
28 #include "gc/parallel/mutableSpace.hpp"
29 #include "gc/parallel/objectStartArray.hpp"
30 #include "gc/parallel/parMarkBitMap.hpp"
31 #include "gc/parallel/parallelScavengeHeap.hpp"
32 #include "gc/shared/collectedHeap.hpp"
33 #include "gc/shared/collectorCounters.hpp"
34 #include "oops/oop.hpp"
35 #include "runtime/atomic.hpp"
36 #include "runtime/orderAccess.hpp"
37
38 class ParallelScavengeHeap;
39 class PSAdaptiveSizePolicy;
40 class PSYoungGen;
41 class PSOldGen;
42 class ParCompactionManager;
43 class ParallelTaskTerminator;
44 class PSParallelCompact;
45 class PreGCValues;
46 class MoveAndUpdateClosure;
47 class RefProcTaskExecutor;
48 class ParallelOldTracer;
49 class STWGCTimer;
50
51 // The SplitInfo class holds the information needed to 'split' a source region
52 // so that the live data can be copied to two destination *spaces*. Normally,
53 // all the live data in a region is copied to a single destination space (e.g.,
54 // everything live in a region in eden is copied entirely into the old gen).
55 // However, when the heap is nearly full, all the live data in eden may not fit
56 // into the old gen. Copying only some of the regions from eden to old gen
57 // requires finding a region that does not contain a partial object (i.e., no
58 // live object crosses the region boundary) somewhere near the last object that
59 // does fit into the old gen. Since it's not always possible to find such a
60 // region, splitting is necessary for predictable behavior.
61 //
62 // A region is always split at the end of the partial object. This avoids
63 // additional tests when calculating the new location of a pointer, which is a
64 // very hot code path. The partial object and everything to its left will be
65 // copied to another space (call it dest_space_1). The live data to the right
|
23 */
24
25 #ifndef SHARE_GC_PARALLEL_PSPARALLELCOMPACT_HPP
26 #define SHARE_GC_PARALLEL_PSPARALLELCOMPACT_HPP
27
28 #include "gc/parallel/mutableSpace.hpp"
29 #include "gc/parallel/objectStartArray.hpp"
30 #include "gc/parallel/parMarkBitMap.hpp"
31 #include "gc/parallel/parallelScavengeHeap.hpp"
32 #include "gc/shared/collectedHeap.hpp"
33 #include "gc/shared/collectorCounters.hpp"
34 #include "oops/oop.hpp"
35 #include "runtime/atomic.hpp"
36 #include "runtime/orderAccess.hpp"
37
38 class ParallelScavengeHeap;
39 class PSAdaptiveSizePolicy;
40 class PSYoungGen;
41 class PSOldGen;
42 class ParCompactionManager;
43 class PSParallelCompact;
44 class MoveAndUpdateClosure;
45 class RefProcTaskExecutor;
46 class ParallelOldTracer;
47 class STWGCTimer;
48
49 // The SplitInfo class holds the information needed to 'split' a source region
50 // so that the live data can be copied to two destination *spaces*. Normally,
51 // all the live data in a region is copied to a single destination space (e.g.,
52 // everything live in a region in eden is copied entirely into the old gen).
53 // However, when the heap is nearly full, all the live data in eden may not fit
54 // into the old gen. Copying only some of the regions from eden to old gen
55 // requires finding a region that does not contain a partial object (i.e., no
56 // live object crosses the region boundary) somewhere near the last object that
57 // does fit into the old gen. Since it's not always possible to find such a
58 // region, splitting is necessary for predictable behavior.
59 //
60 // A region is always split at the end of the partial object. This avoids
61 // additional tests when calculating the new location of a pointer, which is a
62 // very hot code path. The partial object and everything to its left will be
63 // copied to another space (call it dest_space_1). The live data to the right
|